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

KnockoutJS:模板未在可观察数组更改时更新(仅在添加时,在删除时有效)

Knockoutjs:如何使添加到列表中的输入值也可观察

在knockoutjs上绑定按键事件,未填充可观察到

淘汰赛可观察格式