den0820
@den0820
Фронтенд Junior разработчик.

Почему передаем вторым параметром ссылку на объект?

Здравствуйте! Читаю документацию по Knockaut.js. Не совсем понятно в одном из примеров почему передается ссылка на самого себя. Вот пример:

Представление:
<div class="log" data-bind="text: computedLog"></div>
<!--ko if: step() == 0-->
    <p>First name: <input data-bind="textInput: firstName" /></p>
<!--/ko-->
<!--ko if: step() == 1-->
    <p>Last name: <input data-bind="textInput: lastName" /></p>
<!--/ko-->
<!--ko if: step() == 2-->
    <div>Prefix: <select data-bind="value: prefix, options: ['Mr.', 'Ms.','Mrs.','Dr.']"></select></div>
    <h2>Hello, <span data-bind="text: fullName"> </span>!</h2>
<!--/ko-->
<p><button type="button" data-bind="click: next">Next</button></p>


Модель представления:
function AppData() {
    this.firstName = ko.observable('John');
    this.lastName = ko.observable('Burns');
    this.prefix = ko.observable('Dr.');
    this.computedLog = ko.observable('Log: ');
    this.fullName = ko.pureComputed(function () {
        var value = this.prefix() + " " + this.firstName() + " " + this.lastName();
        // Normally, you should avoid writing to observables within a pure computed 
        // observable (avoiding side effects). But this example is meant to demonstrate 
        // its internal workings, and writing a log is a good way to do so.
        this.computedLog(this.computedLog.peek() + value + '; ');
        return value;
    }, this);
};
ko.applyBindings(new AppData());


Метод pureComputed принимает вторым параметром ссылку на конструктор AppData. Почему?
  • Вопрос задан
  • 142 просмотра
Пригласить эксперта
Ответы на вопрос 1
k12th
@k12th
console.log(`You're pulling my leg, right?`);
Не на конструктор, а на инстанс, если что. Потому что если от pureComputed требуется работать в определенном контексте, то надо в него этот контекст передать, иначе откуда возьмется this.prefix, this.firstName и прочее.

Кстати, я узнал это за три минуты чтения документации нокаута, ни разу его не видев до этого.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы