1. ホーム
  2. javascript

新規または削除されたエントリに対してのみ、観測可能な配列を購読する。

2023-11-12 10:25:39

質問

はい、私は観測可能な配列を購読することができます。

vm.myArray = ko.observableArray();
vm.myArray.subscribe(function(newVal){...});

問題は newVal が配列全体であることです。どうにかして、デルタ部分のみを取得することはできないでしょうか?例えば が追加されました。 または を削除 要素を削除しましたか?

どのように解決するのですか?

KnockoutJS 3.0以降では、KnockoutJSに含まれる arrayChangeサブスクリプションオプション を ko.observableArray に追加しました。

var myArray = ko.observableArray(["Alpha", "Beta", "Gamma"]);

myArray.subscribe(function(changes) {

    // For this example, we'll just print out the change info
    console.log(changes);

}, null, "arrayChange");

myArray.push("newitem!");

上記のコールバックでは、changesの引数は以下のようなchangeオブジェクトの配列になります。

[ 
   { 
      index: 3, 
      status: 'added', 
      value: 'newitem!' 
   }
]

あなたの具体的な問題に対して 新しいアイテムや削除されたアイテムの通知を受けたい場合 . Knockout 3を使って実装すると、以下のようになります。

myArray.subscribe(function(changes) {

    changes.forEach(function(change) {
        if (change.status === 'added' || change.status === 'deleted') {
            console.log("Added or removed! The added/removed element is:", change.value);
        }
    });

}, null, "arrayChange");