可视化Knockout中计算字段的依赖关系

时间:2012-06-18 15:28:52

标签: dependencies knockout.js

在knockout.js中有没有办法确定

  • 哪些值(ko.observableko.computed)以何种方式相互依赖(先例/受抚养人)和
  • 哪些HTML节点(文本绑定,对于初学者)取决于当前值 1 ,因此我可以在屏幕上突出显示它们。

1 这意味着我需要一种方法从HTML节点转到连接的ko.subscribable,而不仅仅是视图模型,例如ko.dataFor() 。这似乎也是不可能的。


我已经构建了一个类似于电子表格的Web应用程序 - 根据一组业务规则,许多数字值基于彼此。其中一些是计算的,其中一些是用户提供的。

目前我正在使用自己的JS库来完成所有依赖关系跟踪和动态屏幕更新。这有效,但我想将它与knockout.js交换,以增加多功能性和优雅。

Knockout会在某处跟踪此信息。我该如何使用它?


例如,想象一下总结几个整数的电子表格(HTML表格):

  | A  B  C
--+---------
1 | 4  1  5
2 |    2
3 |    3  8
  • 当用户点击单元格B3时,我想知道它取决于B1和B2而且C3取决于它。
  • 当用户点击C3时,我想知道它取决于A1,B1,C1,B2和B3。

2 个答案:

答案 0 :(得分:7)

我写了一个plugin for Knockout(2.0+),其主要目的是消除计算可观察量的重复更新。但是由于插件替换了ko.computed对象,我还添加了获取可观察对象的依赖项/依赖项列表的功能。每个计算对象都有一个getDependencies方法,它返回一个observable数组,每个observable / computed observable都有一个getDependents方法,它返回一个计算的observables数组。

答案 1 :(得分:4)

这是一个非常有趣的问题 - 似乎并不是一个简单的问题。我查看了淘汰源,看起来这些数据存储在_subscriptionsToDependencies属性中,但似乎没有公开曝光。

我注意到getDependenciesCount已曝光 - 请查看this fiddle以查看其实际效果。

我还在调查这个问题,但似乎它可能需要一个淘汰赛的分支,除非我们能够得到潜在的观察结果。但到目前为止,我发现了这些内容,您可能会觉得有用:

通过调试器运行它,似乎在运行时,敲除的缩小版本将_subscriptionsToDependencies属性重命名为V。在运行时,getDependenciesCount属性的值为:function (){return v.length}

我希望这会有所帮助。

编辑:对于那些到达这个问题寻找答案的人来说,从版本2.1开始,KnockoutJS似乎不可能