Knockout JS - 修改observableArray中项目的属性

时间:2013-10-20 21:58:58

标签: javascript jquery .net asp.net-mvc knockout.js

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

1 个答案:

答案 0 :(得分:6)

observable Arrays

的文档中明确说明了这一点
  

关键点: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中项目的顺序是排序顺序。因此,在绑定中,您只能使用$indexbinding context属性)而不是sortOrder

演示JSFiddle