我的视图模型中的一堆对象具有以下结构
我有一个基础数组,其中填充了包含 ko.observable 项目的对象。
例如:选择 = [{Legs:{'0':ko.observable(12)}}, {Legs:{'0':ko.observable(0)}}]
我想要实现的是,当用户单击复选框时,应该切换该 Runner 的 Selected 值。现在,当这种情况发生时,我还想更新 Cache 值以反映 Runners 选择的状态
缓存用作二进制存储 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"/>