Knockout绑定不会使用简单的observable数组进行更新

时间:2012-05-16 14:45:18

标签: knockout.js

我的视图模型中有一个字符串列表。要编辑它们,我希望每个都显示为带有文本框的<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个普通字符串,然后更新为observableArrayobservable个字符串。使用纯字符串,删除按钮有效,但可以预见,它不会更新视图模型。

我设置了一个相当孤立的问题的小提琴:http://jsfiddle.net/bdukes/uvyH3/2/

如果有一种既定的或更好的方法,我很想知道。

此外,作为一个不相关(且不太重要)的问题,stringifyJson实用程序似乎总是为数组中的每个项目提供空结果。

1 个答案:

答案 0 :(得分:6)

Knockout目前不能很好地处理纯可观察数组(问题已记录here)。

为了使其正常工作,您需要将项目作为包含以下可观察对象的对象:

{ val: ko.observable("something") }

这是您的小提琴更新以使用这些类型的对象:http://jsfiddle.net/rniemeyer/GgFa9/