我有一个复合视图模型,内部还有其他视图模型,它们引入了嵌套绑定。因此,一个嵌套子模型可能会更改另一个子模型的可观察对象,或者是其父对象拥有的模型。
following JsFiddle上有一个示例
在那里,我正在修改一个可观察对象(itemContainer
),该对象本身公开了一个可观察数组属性(items
)。我希望每次修改items
属性或itemContainer
本身时都可以更改绑定。但是,两者似乎都对dom没有任何影响,而实际上绑定是按预期发生的-我正在使用jQuery修改跨度以在操作后声明元素的实际计数(请参阅“实际计数”值)。
因此,我做了another JsFiddle,主要区别是itemContainer
不再是可观察的属性。这次,它的工作几乎达到了我的预期。
但是,只要更改itemContainer
或其items
属性,我就需要能够自动更新dom。我应该怎么做?
同样,在两种情况下,都不会重新评估viewModel.actions.count
计算成员的绑定。我会很感激为什么它没有选择所做的任何见解。
最佳答案
在这里更新了工作提琴:http://jsfiddle.net/hh233r3q/1/
问题出在您的模板中。您绑定contents.itemContainer.items。
<!--ko foreach: contents.itemContainer.items -->
但是,itemContainer初始化为null,而items不是null的属性。
itemContainer: ko.observable(null)
相反,您可以将ko与绑定一起使用。
<!-- ko with: contents.itemContainer -->
<!-- ko foreach: items -->
绑定的ko自动解包itemContainer并在其中使用模板(如果已定义)。看到这里:http://knockoutjs.com/documentation/with-binding.html
另外,请注意,即使定义了itemContainer,您仍然需要调用observable来获取基础对象。
<!--ko foreach: contents.itemContainer().items -->