我有一个复合视图模型,内部还有其他视图模型,它们引入了嵌套绑定。因此,一个嵌套子模型可能会更改另一个子模型的可观察对象,或者是其父对象拥有的模型。

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 -->

10-07 17:37