javascript - ko.dependentObservable 这个方法如何巧妙地理解依赖关系?

标签 javascript knockout.js

我正在用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/

相关文章:

jquery - Select2 下拉列表有时显示重复

javascript - 文本值未显示

javascript - 树形复选框列表中选定的子项目

javascript - knockout 中带有图标的下拉菜单

javascript - 不同的网站图标加载?

knockout.js - knockout 1.3PRE "This template engine does not support anonymous templates nested within its templates"

javascript - jquery 数据表插件和动态对象名称

javascript - 在 Javascript 中将文本转换为单数 Ascii 数字

javascript - 鼠标事件未在 react 中触发

javascript - Rails 4 和 gon - 不工作? window.gon={};