私は KnockoutJS を使用しており、多次元の観測可能な配列 (オブジェクト?) を持っています。
self.navItems = ko.observableArray([
{ name: "test1", children: [
{ name: "test1child1", children: [] },
{ name: "test1child2", children: [] }
]},
{ name: "test2", children: [] },
]);
プロパティ値に基づいて、オブジェクトの 1 つを削除できるようにしたいと考えています。他の作品では、次のようなことをしたいと思っています。
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;
});
};