当值更新时,KnockoutJs会自动跟踪依赖关系.它有一个名为 dependency tracker 的单个对象(ko.dependencyDetection),它作为订阅依赖关系的双方之间的中间人.
以下是算法依赖性跟踪.
步骤1 : 每当你声明一个计算的observable时,KO立即调用它的求值函数来获得它的初始值.
第2步 : 订阅设置为评估者读取的任何可观察对象.在应用程序中,处理不再使用的旧订阅.
步骤3 : KO最终通知更新的计算可观察量.
示例
KnockoutJS How Dependency Tracking Works
输出
让我们执行以下步骤,了解上述代码的工作原理 :
将上述代码保存在 dependency_tracking.htm 文件中.
在浏览器中打开此HTML文件.
输入任何水果名称,然后单击添加按钮.
使用Peek控制依赖项
通过使用peek函数,可以在不创建依赖关系的情况下访问Compute Observable。 它通过更新计算的属性来控制Observable。
示例
KnockoutJs Controlling Dependencies Using Peek Computed Log
输出
让我们执行以下步骤,看看上面的代码如何工作:
将以上代码保存在dependency_tracking_peek.htm文件中。
在浏览器中打开此HTML文件。
观察
忽略计算依赖关系中的依赖关系
ko.ignoreDependencies 函数有助于忽略那些您不想在计算的依赖关系中跟踪的依赖关系.以下是它的语法.
ko.ignoreDependencies(callback,callbackTarget,callbackArgs);
为什么循环依赖无意义
如果KO正在评估Computed Observable,那么它将不会重启评估依赖的Computed Observable.因此,在依赖链中包含循环是没有意义的.