1

あるアイテムを削除して別のアイテムを追加する必要がある監視可能な配列があります。監視可能な配列を呼び出し.remove(myItem)てから新しいアイテムをその配列にプッシュすると、Knockoutはその配列に対して2つの変更通知を発行しますが、この場合、これを1つの変更と見なし、1つの通知のみを発行します。

これを実現するために私が行ったことは、基になる配列を取り出して一時変数に保持し、次にその一時変数に変更を加え、完了したらすべてを監視可能な配列に戻すことです。 。このようなもの(私が実際に行っていることからいくらか単純化されています):

vm.MyArray = ko.observableArray(["foo", "bar"]);

// Later when I need to alter the observable array, I do something like this    
var temp = vm.MyArray();
temp.splice(0, 1);
temp.push("some");
vm.MyArray(temp);

これは私の目標を達成しますが、それを行う正しい方法のようには感じません。

監視可能な配列に複数の変更を加えるより適切な方法はありますが、1つの通知のみが発行されますか?

アップデート:

2つの通知を発生させたくない理由は、配列の変更をサブスクライブし、変更されるたびに新しいデータをロードするようにAJAXリクエストを作成するためです。このため、不要な通知を送信したくありません。配列の編集が「完了する」まで、通知が発行されないようにします。

4

1 に答える 1

2

このような動作を実現するには、ラップされていない監視可能な配列を操作してから、valueHasMutatedメソッドを呼び出す必要があります。

vm.MyArray = ko.observableArray(["foo", "bar"]);
vm.MyArray().remove(myItem);
vm.MyArray().push(newItem);
vm.MyArray.valueHasMutated();
于 2013-03-05T15:10:22.070 に答える