ビューモデル内の一連のオブジェクトに対して次の構造があります
ko.observable アイテムを含むオブジェクトで満たされた基になる配列があります。
例: selections = [{Legs:{'0':ko.observable(12)}}, {Legs:{'0':ko.observable(0)}}]
私が達成しようとしているのは、ユーザーがチェックボックスをクリックすると、そのランナーの選択された値を切り替える必要があるということです。その場合は、ランナーの選択状態を反映するようにキャッシュ値も更新したいと思います。
バイナリストレージとしてキャッシュを使用 12 == 1100 == チェックボックス 3 と 4 がチェックされている
これで、問題なく作業を開始できます。明らかに、Cache を監視可能にする必要さえありません。
しかし、キャッシュの値をプログラムで変更する必要もあり、これらの変更をチェックボックスに自動的に反映させたいと考えています。
以下のものはある程度機能しますが、ノックアウトが適切に処理するループを作成しますが、その結果は信頼できず、これにより速度が低下します。
このバインディング設定を作成するにはどうすればよいですか?
function Runner(name, odds, race, leg, post) {
var runner = {
Name: name,
Odds: odds,
Post: post,
Race: race,
Leg: leg,
Cache: selections[race].Legs[leg],
Selected: ko.observable(false),
Enabled: ko.observable(true),
Valid: true
};
runner.Check = ko.computed(function() {
if (!this.Enabled.peek() || !this.Valid ) return;
var checked = this.Selected();
var cache = this.Cache();
if (checked) {
this.Cache(cache | 1 << this.Post);
} else {
this.Cache(cache & ~(1 << this.Post));
}
}, runner);
return runner;
}
編集
<input type="checkbox" data-bind="checked: Selected, enable: Enabled"/>