私はノックアウト2.2.1を使用しています。対応する値をまとめて取得するために連結する 3 つのチェック ボックスのセットがあります。
<fieldset data-role="controlgroup" id="top-colours" data-bind="topColoursLabel: { topColoursRed,topColoursBlue,topColoursGreen }">
<legend>Top Colours:</legend>
<input type="checkbox" name="top-colours-red" data-bind="checked: topColoursRed" id="tc-check-1" />
<label for="tc-check-1">Red stripes</label>
<input type="checkbox" name="top-colours-blue" data-bind="checked: topColoursBlue" id="tc-check-2" />
<label for="tc-check-2">Blue stripes</label>
<input type="checkbox" name="top-colours-green" data-bind="checked: topColoursGreen" id="tc-check-3" />
<label for="tc-check-3">Green stripes</label>
</fieldset>
結果は、たとえば、「赤のストライプ、青のストライプ」になります。私のビューモデルは次のとおりです。
function ColoursViewModel() {
var self = this;
self.template = "coloursView";
self.topColoursRed = ko.observable(false);
self.topColoursBlue = ko.observable(false);
self.topColoursGreen = ko.observable(false);
self.topColoursDescription = ko.observable("");
}
これを達成するためのカスタムバインディングはどのようになりますか? 私はそのようなことを試みます:
ko.bindingHandlers.topColoursLabel = {
update: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
ko.utils.unwrapObservable(valueAccessor());
// ...
var checkText = '...';
viewModel.topColoursDescription(checkText);
}
};
配列をカスタム バインディングに渡して 3 つのチェック ボックスの値をサブスクライブする方法を見つけることができません。
私には、次のような宣言のようです。
data-bind="topColoursLabel: { topColoursRed,topColoursBlue,topColoursGreen }"
これを達成するのは素晴らしいことですが、私はそれを行う正しい方法を探しています。
注:要素から他のプロパティを取得する必要があるため、ここでは計算されたオブザーバブルを使用できません-テキストのラベルを意味します-カスタムバインディングが必要です。
誰か助けてくれませんか?
更新された jsFiddle: http://jsfiddle.net/Sx87j/