2012-06-27 13 views
11

knockout.jsのドキュメントは次のように結合CSSを示しクリック:変更するCSSクラスは

<div data-bind="css: { profitWarning: currentProfit() < 0 }"> 
    Profit Information 
</div> 

私はマウスクリックのCSSクラスを変更するためにそれを適応させる必要があります。これどうやってするの?下の回答に基づいて

は、私はこのようないくつかのコードを使用しています:

// CSS class to be applied 
<style> 
    .bigclass 
    { 
     width: 200px; 
    } 

</style> 

// Select list inside a jquery .tmpl 
<script id='criteriaRowTemplate' type='text/html'> 
    <tr> 
     <td> 
      <select data-bind='click: makeBig, css: {bigclass : SelectHasFocus() > 0}' /> 
     </td> 
    </tr> 
</script> 

// Knockout.js Viewmodel 
var CriteriaLine = function() { 
    this.SearchCriterion = ko.observable(); 
    this.SelectHasFocus = ko.observable(0); 

    // this method is called 
    makeBig = function(element) { 
     this.SelectHasFocus(1);    
    };   
}; 

しかし、これは、選択リストの幅を広げていません。私は間違って何をしていますか?

+0

私はあなたが持っていると仮定し、 'ko.applyBindings(CriteriaLine())'どこかにドキュメントをロードした後、右?あなたのコードは[ここ](http://jsfiddle.net/6896T/4/)のように動作します。あなたの答えは – Pakman

答えて

1

最も簡単な方法は、click bindingを使用して、コールバック内の観測値を変更することです。 attr binding

+0

ありがとう。サンプルコードを提供できれば、特に選択リストが含まれている場合は、私は非常に義務づけられます。私はcssクラスを使用して選択リスト全体の幅を広げる必要があります。 – Yasir

+0

サンプルコードを追加しましたが、動作しません。何がうまくいかないのか分かりますか? – Yasir

+0

これは、スタックオーバーフローのコードを準備するためのアーティファクトかもしれませんが、makeBigはプライベートであり、バインディングによってアクセスできません。 変更 makeBig = function ... this.makeBig = function ... – daedalus28

15

あなたのクリック機能で観察可能な変数を変更しましたか? exampleの場合:

<div data-bind="css: { myclass: newClass() == true }"> 
    Profit Information 
</div> 

<button data-bind="click: changeClass">Change Class</button> 

<script type="text/javascript"> 
    var viewModel = { 
     newClass: ko.observable(false), 
     changeClass: function() { 
      viewModel.newClass(true); 
     } 
    }; 
</script> 

注:同じ要素にclickcssを組み合わせることができます。たとえば、

<div databind="click: changeClass, css: { myclass: newClass() == true }"></div> 
+0

返信ありがとう@Pakman。私はあなたに似たコードを試しましたが、うまくいきません。私は元の質問にコードを追加しました。何がうまくいかないのか分かりますか? – Yasir

1

スクリプトタグで問題があると感じます。

次のリンクで解決策を見つけるしてください:http://jsfiddle.net/ZmU6g/3/

+2

参照を簡単にするためにjsfiddleに加えてここにソリューションを投稿することはできますか? – InSane

関連する問題