KnockoutJS 有计算 observables 的概念,它是依赖于一个或多个 observables 的函数。Knockout 能够确定计算的 observable 的依赖关系,如文档中所述:
每当你声明一个计算的 observable 时,KO 立即调用它的求值函数来获取它的初始值。当您的评估器功能运行时,KO 会记录您的评估器读取其值的任何可观察对象(或计算的可观察对象)。
现在,我不明白的是,如果您的计算 observable 包含条件逻辑,这是如何工作的。如果 Knockout 调用 evaluator 函数,那么条件逻辑肯定会导致函数所依赖的 observables 未被调用吗?
我创建了这个小提琴来测试:
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
。
谁能解释一下如何?