1

別のオブザーバブル配列自体のアイテムであるオブザーバブル配列からアイテムを削除する最良の方法は何ですか? 例を挙げましょう(簡略化)。

監視可能な配列「チャット」があるとしましょう:

self.chats = ko.observableArray();

これは私のチャットオブジェクトです:

function chat(id, name, members) {
    this.id = id;
    this.name = name;
    this.members = ko.observableArray(members);
}

ここにメンバーオブジェクトがあります:

function member(id, username) {
    this.id = id;
    this.username = username;
}

チャット配列からメンバーを削除したいのですが、メンバーの ID しかわかりません。メンバーが属するチャットについては何も知りません。chatすべてのアイテムを ( を使用してko.utils.arrayForEach)ループし、すべてのアイテムをループmemberして ID をチェックするよりも良い方法はありますか?

4

2 に答える 2

0

確かに、私はknockout.jsにあまり詳しくありませんが、「chat」というメンバー クラスに新しいプロパティを追加することは可能ですか?

基本的に、メンバーが何らかの形でチャットに関連付けられるたびに、そのプロパティをチャット ID で更新します。これにより、チャット オブジェクトとメンバー オブジェクトの両方のプロパティを必要とする操作を実行するときに、2 つをより簡単にリンクできるようになります。

必要に応じて、コンストラクター内で変数として宣言することにより、chat をプライベートな「プロパティ」にしてください。そうすれば、作成したゲッター/セッター メソッドを介してのみ「チャット」を参照できます。

于 2013-01-15T16:38:17.920 に答える
0

マップを使用して、メンバー ID をメンバーが参加しているチャットにマップできます。IE:

var memberMap = {};
...
//on add
if(!(memberId in memberMap){
    memberMap[memberId] = [chatRef]
}
else{
    memberMap[memberId].push(chatRef);
}

次に、チャット オブジェクトへの参照をキャッシュして、それらのメンバー リストを直接検索できるようにします。

アップデート

どうやらメンバーとチャットの関係は 1 対 1 であるため、membermap コードは次のようになります。

var memberMap = {};
...
//on add
    memberMap[memberId] = chatRef;
于 2013-01-15T16:55:13.793 に答える