0

私はノックアウトに慣れていませんが、Google とスタック オーバーフローの助けを借りて、必要なピースを見つけることができました。私は彼らを一緒に働かせることができないようです。

そこで、ここまたは彼のサイトに回答として投稿された RP Niemeyer のコードの一部を取り上げました。ノックアウトソート可能なダーティフラグを使用し、ソート可能なアイテムのインデックスを観察しています。

私が探しているのは、ダーティ アイテムを元に戻すときに、並べ替え可能な順序を更新する方法です。オブジェクトのインデックス付きプロパティは元に戻されますが、並べ替え可能領域内のアイテムの順序は元に戻された値に基づいて更新されません。

これは、問題の例のフィドルです。

「アイテム 1」を「アイテム 2」の後に移動すると、両方のアイテムが汚れていることがわかります (当然のことです)。次に、「元に戻す」ボタンをクリックします。アイテム「Order」がどのように更新されるかに注目してください。

さらに悪いことに (これは問題の副作用のようなものです)、"Item 3" を "Item 4" の後に移動すると、Item 1 から 4 がダーティとしてマークされていることがわかります。

これは、ダーティ アイテムを元に戻したときに、並べ替え可能なアイテムの順序がリセットされないためです。「アイテム 1」は、その順序オブザーバブルの値が 0 ですが、ソート可能なインデックス 1 にあります。したがって、コードは再びダーティとしてマークします。

誰かが私が望むように機能させるために何を変更する必要があるかを指摘していただければ幸いです。

The code is quite lengthy and I wouldn't know which part to post here, but apparently I need a code block to be allowed to post my fiddle link. :(

前もって感謝します、Ludvig

4

1 に答える 1

0

現在の構造では、ビューモデルレベルの関数に数行追加してrevertItem、アイテムを「正しい」順序に戻すことができると思います。何かのようなもの:

    self.revertItem = function (preset) {
        $.each(preset.dirtyItems(), function (index, item) {
            item.revert();
        });

        //new code added to sort based on order
        self.items.sort(function(a, b) {
            return a.order() > b.order() ? 1 : -1; 
        });
    };     

更新されたフィドル: http://jsfiddle.net/rniemeyer/d2e5c/

于 2013-09-25T11:58:28.337 に答える