在knockout中删除子数组项

时间:2013-01-15 16:18:06

标签: javascript knockout.js

从可观察数组中删除项目的最佳方法是什么?该数组是另一个可观察数组本身的项目?让我举一个例子(简化)。

假设我有一个可观察的数组'聊天':

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?

2 个答案:

答案 0 :(得分:0)

当然,我对knockout.js不是很熟悉,但您是否有可能在名为“chat”的成员类中添加新属性?

基本上,每当某个成员以某种方式与聊天相关联时,您都会使用聊天ID更新该属性,这样您就可以在执行需要聊天和成员属性的操作时更轻松地将这两者联系起来。对象

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

答案 1 :(得分:0)

您可以使用地图将成员ID映射到他们所在的任何聊天.IE:

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;