1

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そのため、プロパティを作成する必要があり( Knockout Mappingko.observable()と呼ばれるプラグインがあり、これに役立ちます)、次に変更する必要があります。adjustOrder

self.adjustOrder = function () {
    for (var i = 0, j = self.items().length; i < j; i++) {
        self.items()[i].sortOrder(i);
    };
};

JSFiddleのデモ。

SideNote:しかし、あなたのケースでは、アイテムの順序がソート順sortOrderであるため、プロパティには何も必要ありません。したがって、バインディングでは、の代わりに(バインディング コンテキストプロパティ)itemsだけを使用できます。$indexsortOrder

JSFiddleのデモ。

于 2013-10-20T22:09:31.570 に答える