KnockoutJS имеет понятие вычисленных наблюдаемых, которые являются функциями, зависящими от одного или нескольких наблюдаемых. Нокаут способен определять зависимости вычисленного наблюдаемого, как описано в документах:
Всякий раз, когда вы объявляете вычисленное наблюдение, КО немедленно вызывает его чтобы получить его начальное значение. Пока ваш оценщик функция работает, KO ведет журнал любых наблюдаемых (или вычисленных наблюдаемые), что ваш оценщик читает значение.
Теперь я не понимаю, как это работает, если ваш вычисленный наблюдаемый содержит условную логику. Если Knockout вызывает функцию оценщика, то, конечно, условная логика может привести к наблюдаемым значениям, зависящим от функции, не вызываемой?
Я создал эту скрипту, чтобы проверить:
var ViewModel = function(first, last) {
this.firstName = ko.observable(first);
this.lastName = ko.observable(last);
this.condition = ko.observable(false);
// at the point of evaluation of this computed observabled, 'condition'
// will be false, yet the dependecy to both firstName and lastName is
// identified
this.fullName = ko.computed(function() {
return this.condition() ? this.firstName() : this.lastName();
}, this);
};
Однако каким-то образом Knockout правильно идентифицировал зависимость как от firstName
, так и от lastName
.
Может кто-нибудь объяснить, как?