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 不太熟悉,但是您是否可以向名为“聊天”的成员类添加一个新属性?

本质上,每次成员以某种方式与聊天相关联时,您都会使用聊天 ID 更新该属性,以便在执行需要来自聊天和成员对象的属性的操作时更轻松地链接两者。

如果您愿意,可以通过在构造函数中将其声明为变量,随意将聊天变成私有“属性”;这样,您只能通过您编写的任何 getter/setter 方法引用“聊天”。

于 2013-01-15T16:38:17.920 回答
0

您可以使用映射将成员 ID 映射到他们所在的任何聊天。即:

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

然后,您将缓存对聊天对象的引用,以便您可以直接搜索这些成员列表。

更新

由于显然存在 1-1 成员聊天关系,因此成员映射代码可以看起来像这样

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