Есть несколько аналогичных способов справиться с этим. Основная идея заключается в том, что вам нужно создать запись, которую можно вычислить, чтобы привязать флажок.
Вы можете сделать это в своей модели напрямую, используя удлинитель или добавив функцию к наблюдаемой базе (ko.observable.fn).
Однако, поскольку вы используете плагин сопоставления и, вероятно, не хотите настраивать способ создания или добавления объектов, я считаю, что использование настраиваемого связывания является наилучшим вариантом. Ваша модель действительно не должна заботиться о том, чтобы поддерживать обратное к вашему свойству, поэтому мы можем фактически сделать эту часть при привязке.
Вот привязка inverseChecked
, которая вставляет записываемый счетчик, наблюдаемый между реальным наблюдаемым и привязкой. Затем он просто использует реальное проверочное связывание для выполнения своей работы.
ko.bindingHandlers.inverseChecked = {
init: function(element, valueAccessor, allBindingsAccessor) {
var value = valueAccessor();
var interceptor = ko.computed({
read: function() {
return !value();
},
write: function(newValue) {
value(!newValue);
},
disposeWhenNodeIsRemoved: element
});
var newValueAccessor = function() { return interceptor; };
//keep a reference, so we can use in update function
ko.utils.domData.set(element, "newValueAccessor", newValueAccessor);
//call the real checked binding's init with the interceptor instead of our real observable
ko.bindingHandlers.checked.init(element, newValueAccessor, allBindingsAccessor);
},
update: function(element, valueAccessor) {
//call the real checked binding's update with our interceptor instead of our real observable
ko.bindingHandlers.checked.update(element, ko.utils.domData.get(element, "newValueAccessor"));
}
};
Вот пример: http://jsfiddle.net/rniemeyer/Kz4Tf/
Для вашего visible
связывания вы можете сделать visible: !needsReview()
Спасибо. Это похоже на то, что мне нужно. Просто кажется, что это должно быть проще, не так ли? Я посмотрю, не могу ли я это сделать сегодня утром ... – ShaneBlake
То, что мне нужно. Большое спасибо ... – ShaneBlake
Прохладный ответ, Право на. Но мне интересно, почему бы просто не использовать Radio Buttons? –