バインディングを使用してクラスを設定することができattr
ます(@david.s の提案に従って) が、このタイプのロジックがある場合は、 custom に配置する傾向がありますbindingHandler
。
(この場合は) 境界線の色を決定するが、クラスに直接関連付けられていない状態情報を viewModel に公開させます。
this.state = ko.observable("complete"); //complete, pending, or cancelled (for example)
次に、バインディング ハンドラーを使用して、これをクラスにマップします。
ko.bindingHandlers.stateStyle = {
update: function(element, valueAccessor) {
var state = ko.utils.unwrapObservable(valueAccessor());
if (state === "completed") {
$(element).addClass("hasGreenBorder"); //again, just an example
}
else if (state === "pending") {
//etc
}
}
}
次に、要素に新しいバインディングを使用します
<div data-bind="stateStyle: state"></div>
このアプローチは、ビュー モデルが css クラスを直接参照しておらず (私には間違っているように感じます) state1 => green border
、ビューのインライン バインディングでロジックが定義されていないことを意味します。