次のようなobservableArrayがあります。
this.menuItems = ko.observableArray([
{ name: "level1", subItems: [
{ name: "level1-1" },
{ name: "level1-2" }
] },
{ name: "level2" },
{ name: "level3", subItems: [
{ name: "level3-1" },
{ name: "level3-2", subItems: [
{ name: "level3-2-1" }
] },
] },
{ name: "level4" }
]);
これにより、マルチレベルのナビゲーション メニューが表示されます。そのため、サブアイテムを持つことができるアイテムもあれば、持たないアイテムもあります。また、レベル数は不明です。
これで、これらをフィルター処理するための「フィルター ナビゲーション」入力ができました。
var self = this,
menuFilter = ko.observable(""),
filter = menuFilter().toLowerCase();
if (filter === "") {
return self.menuItems();
} else {
return ko.utils.arrayFilter(self.menuItems(), function (item) {
if (item.name.toLowerCase().indexOf(filter) !== -1) {
return true;
}
});
}
self.menuItems().subItems
これはトップレベルのアイテムにはうまく機能しますが、 をループし、次に次のレベル、次などをループする最良の方法がわかりません.
何か案は?
編集:この JS Fiddle を作成したところ、動作しているようです。今、[少し複雑な] アプリでそれを実行する方法を見つけなければなりません。
編集(再び):私の最新の問題は、トップレベルに情報がないため、機能し.children
ないで開始する必要があることです。