我有一个可观察的数组绑定到一个列表,该列表使用 JQuery-ui 通过拖放进行重新排序。我还希望能够从可观察数组中删除项目。一切似乎都很好,直到我尝试删除已经重新订购的项目。
考虑以下 JsFiddle 代码: http://jsfiddle.net/4mMfE/
尝试将"熊"拖动到列表中的第三项,然后删除他,这似乎不起作用,但您可以删除其他项。
有谁知道如何让它按预期工作?
我有一种感觉,这与viewModel的可观察数组的顺序与页面上显示的元素的实际顺序不同步有关。
.
您是正确的,这与用户正在更改 DOM 中项目的顺序并且它没有在 observableArray 中更新有关,因此当您删除项目时找不到它。
您需要的是一个自定义绑定,它侦听重新排序事件并相应地更新模型。方便的是,这对于jQuery UI可排序已经存在:https://github.com/rniemeyer/knockout-sortable<</p>
我认为Knockout不知道如何更新UI。它正在从数组中删除元素。
只需将您的 removeItem 功能更改为此功能,然后自己查看即可。
alert(self.items().slength);
self.items.remove(data);
alert(self.items().slength);