画像のようにカスケードリストボックスを作成する必要がありますが、各リストボックスは同じデータリストを使用しますが、フィルタは異なります。 私はthis codeを持っていますが、私は2つの選択肢でそれを行うことができますが、あなたが見ることができるように、私は2つの観測値を使って各選択値を読み込みます。 foreachバインドを使用してこれを作成する方法はありますか?foreachを使用して同じフィルタリングされたリストのカスケードリストボックス
var ViewModel = function() {
self = this;
self.family = ko.mapping.fromJS(data.family);
self.selected = ko.observable();
self.selected2 = ko.observable();
self.filteredFamily = ko.computed(function() {
var list = ko.utils.arrayFilter(self.family(), function(item) {
if (self.selected() == undefined) return;
return item.parent() === self.selected().name();
});
return list;
});
}
var data = {
family: [{
name: "John",
parent: null
}, {
name: "Mike",
parent: null
}, {
name: "Alice",
parent: "John"
}, {
name: "Paul",
parent: "John"
}]
};
var viewModel = new ViewModel();
ko.applyBindings(viewModel);
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout.mapping/2.4.1/knockout.mapping.min.js"></script>
<select data-bind="options: family, optionValue: name,optionsText: 'name',value:selected, optionsCaption: 'Choose...'"></select>
<select data-bind="options: filteredFamily, optionValue: name,optionsText: 'name',value:selected2, optionsCaption: 'Choose...'"></select>
[UPDATED]
、私は必要な私は私の質問はよく策定されなかったと思います申し訳ありませんが、その私はリストボックスで何かを選択し、次の更新は、彼のデータと最後のlisboxのデータ。
申し訳ありません@Jeroen、私は私の質問はよく策定されなかったと思い、私が必要とする、私はリストボックスで何かを選択し、次の更新彼のデータ最後のlisboxのデータと比較します。 – Guto