我正在使用 KnockoutJS 并有一个多维可观察数组(对象?):
self.navItems = ko.observableArray([
{ name: "test1", children: [
{ name: "test1child1", children: [] },
{ name: "test1child2", children: [] }
]},
{ name: "test2", children: [] },
]);
我希望能够根据属性值删除其中一个对象。在其他作品中,我想做这样的事情:
removeNavItem("test1child2");
我编写了一个函数,但无法让它工作,因为它正在寻找“test1child2”作为属性,而不是值。
self.removeNavItem = function (itemName) {
var item = ko.utils.arrayFirst(self.navItems(), function (item) {
if (item.name === itemName) { // this seems to work correctly
delete self.navItems[itemName]; // this doesn't, because it tests property, not value
}
});
};
编辑:
我不知道 KO 内置的 remove/removeAll 方法。
感谢下面的评论者,我让它部分工作,但是当我尝试删除 children[] 内部的某些内容时,它也会删除整个父项。
removeNavItem = function (itemName) {
var items = self.navItems.remove(function (item) {
for (i = 0; i < item.children.length; i++) {
if (item.children[i].name === itemName) {
return item.children[i].name;
}
}
return item.name === itemName;
});
};