条件に基づいて2つの配列のいずれかを返し、それにバインドする計算されたオブザーバブルを作成します。適切に更新されるように、どちらを選択するかを決定する条件も観察可能であることを確認してください。
function ViewModel(data) {
this.array1 = ko.observableArray(data.array1);
this.array2 = ko.observableArray(data.array2);
// change this value to true to use array2
this.chooseArray2 = ko.observable(false);
this.array = ko.computed(function () {
return this.chooseArray2()
? this.array2()
: this.array1();
}, this);
}
<div data-bind="foreach: array">
...
</div>
もちろん、ロジックはそれよりも複雑になる可能性があります。より管理しやすくするために、条件をオブザーバブルにも計算し、そこにロジックを作成します。配列を返す計算されたオブザーバブルは、あまり変更する必要はありません。
function ViewModel(data) {
this.array1 = ko.observableArray(data.array1);
this.array2 = ko.observableArray(data.array2);
// which to choose depends on a number of conditions
this.someCondition = ko.observable(false);
this.anotherCondition = ko.observable(true);
this.someNumber = ko.observable(132);
this.chooseArray2 = ko.computed(function () {
// some complex logic
if (this.someNumber() < 0) {
return this.someCondition();
}
return this.someCondition() || !this.anotherCondition();
}, this);
this.array = ko.computed(function () {
return this.chooseArray2()
? this.array2()
: this.array1();
}, this);
}