knockoutjs 可观察对象绑定的可观察数组
Posted
技术标签:
【中文标题】knockoutjs 可观察对象绑定的可观察数组【英文标题】:knockoutjs observable array of observable objects binding 【发布时间】:2017-11-25 09:39:53 【问题描述】:我有一个问题,当我将包含可观察属性的对象添加到可观察数组时,接口没有被更新。
我在这个论坛 (KnockoutJS - Observable Array of Observable objects) 上研究过类似的问题,但我仍然无法正确理解语法,所以经过一天的尝试后,我转而寻求帮助。
我已经创建了一个我想要实现的示例
https://jsfiddle.net/ryrpnbr9/23/
当您按下“添加”按钮时,会创建一个 BatchItem 对象并将其添加到 Batch 的 BatchItems observablearray 中。我可以看到对象正在更新。
我有一个定义了以下绑定的表
<tbody data-bind="foreach: Batch.BatchItems()">
<tr>
<td><span data-bind="text: DocumentType"></span></td>
<td><span data-bind="text: ItemType"></span></td>
</tr>
</tbody>
任何帮助将不胜感激。谢谢
【问题讨论】:
【参考方案1】:您必须拨打self.Batch.BatchItems.push(bi);
,而不是self.Batch.BatchItems().push(bi);
两者的区别:
第一个直接推送到可观察数组内部的数组。这行得通,但淘汰赛将无法说出发生了什么变化......
第二个使用ko.observableArray
内部的push
方法。这个push
方法再次推送到内部数组,但它也调用valueHasMutated
。这会触发更新模型和 UI 所需的依赖项更新。
更新了fiddle,删除了()
【讨论】:
以上是关于knockoutjs 可观察对象绑定的可观察数组的主要内容,如果未能解决你的问题,请参考以下文章
KnockoutJS json 对象/可观察的“可见”绑定不起作用
可观察到的数组更改不会反映在第一次点击 - KnockoutJS