У меня есть следующая структура для группы объектов в моей модели представления
У меня есть базовый массив, заполненный объектами, в которых есть элементы ko.observable.
Пример: selections = [{Ноги:{'0':ko.observable(12)}}, {Ноги:{'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"/>