我的视图模型中有一个字符串列表。要编辑它们,我希望每个都显示为带有文本框的<li>
和<button>
以删除项目。所以,对于列表['A', 'B']
,我想要这样的东西:
<ul data-bind="foreach: titles">
<li>
<input value="A" data-bind="value:$data" />
<button data-bind="click: $root.remove">remove</button>
</li>
<li>
<input value="B" data-bind="value:$data" />
<button data-bind="click: $root.remove">remove</button>
</li>
</ul>
<button data-bind="click: add">add</button>
我最初可以创建它,但是没有获得要在视图模型中反映的值的更新,并且无法使删除按钮正常工作。
我最初有observableArray
个普通字符串,然后更新为observableArray
个observable
个字符串。使用纯字符串,删除按钮有效,但可以预见,它不会更新视图模型。
我设置了一个相当孤立的问题的小提琴:http://jsfiddle.net/bdukes/uvyH3/2/
如果有一种既定的或更好的方法,我很想知道。
此外,作为一个不相关(且不太重要)的问题,stringifyJson
实用程序似乎总是为数组中的每个项目提供空结果。
答案 0 :(得分:6)
Knockout目前不能很好地处理纯可观察数组(问题已记录here)。
为了使其正常工作,您需要将项目作为包含以下可观察对象的对象:
{ val: ko.observable("something") }
这是您的小提琴更新以使用这些类型的对象:http://jsfiddle.net/rniemeyer/GgFa9/