これを処理するのに似たような方法がいくつかあります。基本的な考え方は、チェックボックスをバインドするための書き込み可能な計算オブザーバブルを作成する必要があるということです。
これは、モデルで直接、エクステンダを使用して、または観察可能なベース(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"));
}
};
はサンプルです:あなたはvisible: !needsReview()
ありがとうございます。これはまさに私が必要とするもののように見えます。それは本当にそれがこれより簡単であるように思えるでしょうか?私は今朝それを繋ぐことができないかどうか見てみましょう... – ShaneBlake
正確に私が必要としたもの。ありがとうございました... – ShaneBlake
クールな回答、右。でも、ラジオボタンだけではないのはなぜですか? –