我正在用knockoutjs 玩他们的示例,我已经编辑了原始代码,如下所示。 fullName 属性分配为 dependentObservable,并且此方法肯定知道 fullName 方法内的依赖项,因此 fullName 方法仅在依赖项发生更改时才有效。
如果我从 fullName 方法中删除 this.LastName() ,那么更改 lastName 属性不会导致调用 fullName 方法。
我想知道这是怎么发生的。
var viewModel = {
firstName: ko.observable("Bert"),
lastName: ko.observable("Bertington")
};
viewModel.fullName = ko.dependentObservable(function() {
alert('worked');
return this.firstName() + " "+ this.lastName() ;
}, viewModel);
// Activates knockout.js
ko.applyBindings(viewModel);
最佳答案
Knockout 中有一个依赖跟踪机制,在评估 dependentObservables 时使用。关键是访问可观察对象必须通过一个函数(您必须调用 this.firstName()
)。除了返回firstName之外,Knockout还将dependentObservable添加为firstName
的订阅者。当 firstName
更新时(再次必须通过该函数),所有订阅者都会收到通知。
此外,每次评估 dependentObservable 时都会重新评估这些依赖关系,因此 dependentObservable 的依赖关系实际上会随着时间的推移而发生变化。
关于javascript - ko.dependentObservable 这个方法如何巧妙地理解依赖关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8495375/