【发布时间】:2017-01-16 18:26:17
【问题描述】:
我有一个问题,如果我将 foreach 绑定与 observableArray 一起使用,我不会看到对 observableArray 所做的更改反映在屏幕上。
绑定如下所示:
<div data-bind="foreach: items">
<p>
<input data-bind="value: name" />
</p>
<p>Name: <span data-bind="text: name"></span></p>
<br />
</div>
observableArray 如下所示:
this.items = ko.observableArray([
{ name: 'Person 1', role: 'Sales' },
{ name: 'Person 2', role: 'Accounts' },
{ name: 'Person 3', role: 'Admin' }
]);
这是一个 JSFiddle 来说明问题: https://jsfiddle.net/ue3opdd2/2/
HTML 使用水平分隔符分成 2 个部分。在第 1 节中是一个使用可观察对象的绑定。如果您修改文本框,您会看到更改反映在下面的 span 元素中。这是有效的。
在第 2 节中是完全相同的主体,但使用 observableArray 和 foreach 绑定。例如,如果您更改“Person 1”文本框中的值,我希望看到此更改反映在下面的 span 元素中,但它不起作用(它保持为“Name:Person 1”)。
我在屏幕底部放置了一个调试输出,但我也没有看到 observableArray 更新的值。
我可以看到的主要区别是 observableArray 是“复杂类型”。我的意思是每个元素都由一个包含名称和角色的对象组成。这会有所不同吗?
谁能帮我解决这个问题?
【问题讨论】:
-
数组中的项目也需要是可观察的。
标签: knockout.js