这是一个 jsFiddle演示以下问题:
给定(可观察的)字符串列表上的 foreach 绑定,可观察对象似乎不会从绑定在 foreach 内的输入标签的更改中更新。人们会期望他们这样做。这是来自 jsFiddle 的示例:
HTML
<ul data-bind='foreach: list'>
<li><input data-bind='value: $data'/></li>
</ul>
<ul data-bind='foreach: list'>
<li><span data-bind='text: $data'></span></li>
</ul>
Javascript
var vm = { list: [ko.observable('123'), ko.observable('456')] };
ko.applyBindings(vm);
在上面的例子中,人们会期望更新第一个列表中的输入标签会导致 observables 更新。不幸的是,它们没有按预期更新,从第二个列表未能反映对第一个列表所做的任何更改可以看出。
我验证了当输入元素发生变化时,列表实际上并没有被更新。有趣的是,对可观察对象所做的更改都反映在两个列表中(正如人们所期望的那样)。即,vm.list[1]("444")
将更新两个列表的第二个元素。
我的回忆是 Knockout 2.0.0 没有这个问题,尽管我有待纠正。我没有在 Knockout 代码中找到任何文档、Google 或注释来说明为什么这不起作用或如何实现预期的结果。
为什么这不能按预期工作,是否有任何不需要更改数据结构的解决方法?