gpt4 book ai didi

javascript - Knockout 嵌套绑定(bind)相互更新的问题,但不是 dom

转载 作者:行者123 更新时间:2023-11-30 10:10:33 24 4
gpt4 key购买 nike

我有一个复合 View 模型,里面有其他 View 模型,它引入了嵌套绑定(bind)。因此,一个嵌套的子模型有可能改变另一个子模型的可观察对象,或者一个由其父对象拥有的对象。

following JsFiddle 上有一个例子

在那里,我正在修改一个可观察对象 (itemContainer),它本身公开一个可观察数组属性 (items)。我希望能够在每次修改 items 属性或 itemContainer 本身时更改绑定(bind)。然而,两者似乎都对 dom 没有任何影响,而实际上绑定(bind)按预期发生 - 我正在使用 jQuery 修改跨度以在我的操作后断言元素的实际计数(请参阅“实际计数”值)。

所以,我做了another JsFiddle主要区别在于 itemContainer 不再是可观察的属性。这次它几乎如我所料。

但是,每当我更改 itemContainer 或其 items 属性时,我都需要能够让 dom 自动更新。我该怎么办?

此外,在这两种情况下,viewModel.actions.count 计算成员的绑定(bind)都不会重新计算。对于为什么它不选择更改的任何见解,我将不胜感激。

最佳答案

在这里更新了工作 fiddle :http://jsfiddle.net/hh233r3q/1/

问题出在您的模板中。您绑定(bind) contents.itemContainer.items。

<!--ko foreach: contents.itemContainer.items -->

但是,itemContainer 被初始化为null,items 不是null 的属性。

itemContainer: ko.observable(null)

相反,您可以将 ko 与绑定(bind)一起使用。

<!-- ko with: contents.itemContainer -->
<!-- ko foreach: items -->

带绑定(bind)的 ko 会自动解包 itemContainer 并使用其中的模板(如果已定义)。看这里:http://knockoutjs.com/documentation/with-binding.html

另外请注意,即使定义了 itemContainer,您仍然需要调用可观察对象来获取底层对象。

<!--ko foreach: contents.itemContainer().items -->

关于javascript - Knockout 嵌套绑定(bind)相互更新的问题,但不是 dom,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26911093/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com