1

当一个项目被重新定位时,我正在尝试更新以红色显示的数字以反映 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;
    };
};
4

1 回答 1

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

sortOrder旁注:但在您的情况下,您的属性实际上并不需要任何东西,因为其中项目的顺序items是排序顺序。因此,在您的绑定中,您可以只使用$index(绑定上下文属性) 而不是sortOrder.

演示JSFiddle

于 2013-10-20T22:09:31.570 回答