2016-06-21 8 views
0
<div data-bind="css: { highlighted: highlight }, click: toggleHighlight"> 
    random string 
</div> 
<input type="checkbox" data-bind="css: { 'checked': dimitri, 'unchecked': !dimitri() }, click: toggledimitri, checked: dimitri"> 

var ViewModel = function() { 
    var self = this; 
    self.dimitri = ko.observable(false); 
    self.toggledimitri = function() { self.dimitri(!self.dimitri()) }; 
    self.highlight = ko.observable(true); 
    self.toggleHighlight = function() { self.highlight(!self.highlight()) }; 
} 

ko.applyBindings(new ViewModel()); 
var vm = ko.dataFor(document.body); 

を確認切り替えもノックアウトを使用してチェックボックスをチェックし、オフにしながらCSSクラス{チェックし、未チェック}のトグルがチェックです:CSSを:クリック:。私が正しいことをしていない少しのアイデア? jsfiddleノックアウトチェックボックストグルCSSクラスと私は後だ基本的に何をクリックすると

+0

:ここ

this.checkedClass = ko.computed(function() { return this.dimitri() ? 'checked' : 'unchecked'; }, this); 

はこれを示し更新バイオリンへのリンクです'checked'バインディングは、トグル機能を得るために追加の' click'バインディングを必要としません。チェックボックスから 'click'バインディングを削除し、何が起こるかを確認してください。 – user3297291

+0

最初にお手伝いをしてくれてありがとうと私は一歩近づけましたが、ノックアウト観測値がfalseのときにチェックされていないクラスが割り当てられないように、私はもう一度元に戻しました。要素がチェックされていないときにクラスを割り当てる必要があります。 –

+0

'unchecked'クラスバインディングで'!dimitri() 'を使う必要があります。 '!dimitri'はobservableを自動的にアンラップできません。だから: 'data-bind =" css:{'チェックした:dimitri、' unchecked ':!dimitri()}、チェック:dimitri "' – user3297291

答えて

1

代わりに結合cssを使用して、あなたはバインディングattrを使用して試してみて、class属性に直接結合することができます。 ko.computedメソッドを使用して、適切なCSSクラス名を返すことができます。また、user3297291が指定されているので、clickイベントは必要ありません。チェックボックスは、次のようになります。

<input type="checkbox" data-bind="attr: { 'class': checkedClass }, checked: dimitri"> 

そしてko.computed方法は次のようになります。

http://jsfiddle.net/KDypD/56/

+0

おかげであなたの別のアプローチも非常に魅力的で重要なことを心に持っている –

1

コメントに示唆されているように、チェックとクリックは効果的にお互いを否定します。チェックされたバインディングは、クリックが手動でもう一度切り替わる間に自動的に切り替わります。クリックを削除すると問題が解決されます。

<input type="checkbox" data-bind="css: { 'checked': dimitri, 'unchecked': !dimitri() }, checked: dimitri"> 

http://jsfiddle.net/KDypD/55/

+0

最初に助けてくれてありがとう。 knockout observableがfalseのときにチェックされていないクラスが割り当てられないようにするため、すでに元に戻っています。要素がチェックされていないときにクラスを割り当てる必要があります。 –

+0

@JoeBorg 'dimitri'は観測可能なので、'!dimitri'は使用できません。 'Obcheable:!dimitri()' これは答えがあることに注意してください。 –

+0

@RoyJこのようなシンプルな構文の変更を明確にし、すべての違いを作ってくれてありがとう、私はここで質問を投稿する前にネット上で似たようなものを見つけたかもしれないと思うし、何らかの理由で、それは、コードの変更を変更しなかった、私はあなたのソリューションに似ていないことを思い出す。しかし、今私はゆっくりとあなたの仕事の罰金を試した:) –

関連する問題