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 и прочее.

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

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

Похожие вопросы