我正在尝试更新红色显示的棕色,以便在重新定位一个项目时反映observableArray中每个项目的位置。您可以在此处查看我当前的代码:http://jsfiddle.net/BV87N/
它的表现并不像我期望的那样。我有一种感觉,因为数组中的项目及其属性本身无法被观察到。
但我不太确定如何让它发挥作用。
ko.bindingHandlers.sortable.afterMove = function () {
self.adjustOrder();
};
self.adjustOrder = function () {
for (var i = 0, j = self.items().length; i < j; i++) {
self.items()[i].sortOrder = i;
};
};
答案 0 :(得分:6)
关键点:observableArray跟踪数组中的对象, 而不是那些对象的状态
简单地将一个对象放入一个observableArray并不能完全实现 该对象的属性本身是可观察的。当然可以 如果你愿意,可以观察这些属性,但那是一个 独立选择。
因此,您需要制作sortOrder
属性ko.observable()
(有一个名为Knockout Mapping的插件可以提供帮助),然后将adjustOrder
更改为
self.adjustOrder = function () {
for (var i = 0, j = self.items().length; i < j; i++) {
self.items()[i].sortOrder(i);
};
};
演示JSFiddle。
SideNote:但是在你的情况下,你的sortOrder
属性并不需要任何属性,因为items
中项目的顺序是排序顺序。因此,在绑定中,您只能使用$index
(binding context属性)而不是sortOrder
。
演示JSFiddle。