Нокаут вычисляет оценку на всех страницах при соединении

Я только что заметил, что после того, как я конкатенировал свои js, все вычисляемые наблюдаемые наблюдаемые нокауты оцениваются и вызываются на всех страницах, даже если я не связываю модель представления, которая их содержит, это ожидаемое поведение? Если так, как я могу избежать этого?

1 ответ

Решение

Это исключительное поведение:

По умолчанию вычисляемая наблюдаемая имеет значение, определенное непосредственно во время создания.

Если вы хотите изменить это, вам нужно установить deferEvaluation к истине:

тогда значение вычисляемой наблюдаемой не будет оцениваться до тех пор, пока что-то на самом деле не попытается получить доступ к его значению или не подпишется на него вручную.

Таким образом, ваши вычисления должны выглядеть следующим образом:

function AppViewModel() {
    this.firstName = ko.observable('Bob');
    this.lastName = ko.observable('Smith');

    this.fullName = ko.computed(function() {
        return this.firstName() + " " + this.lastName();
    }, this, { deferEvaluation: true });
}
Другие вопросы по тегам