2012-11-26 3 views
7

、私は非常に単純なビューモデル持っている:ノックアウト見え結合機能していない

<a href="#" data-bind="click: toggleVisibility">Toggle</a> 
<br /> 
<table> 
    <tr data-bind="visible: showRow">Some Text</tr> 
</table> 

私の問題があり、リンクがクリックされたことを、警告:同じように簡単なマークアップで

var ViewModel = function() { 
    this.showRow = ko.observable(false); 
    this.toggleVisibility = function() { 
     if(this.showRow == true){ 
      this.showRow = false; 
     } 
     else{ 
      this.showRow = true; 
     } 
     alert('showRow is now '+this.showRow); //only here for testing 
    }; 
}; 

を(正確な値を表示する - 真/偽)

しかし、tr要素の目に見えるバインディングは、最初に(行が見えないようにする)、またはshowRowの値がトグルします。

あなたは次のようにあなたのhtmlを変更する必要が上述http://jsfiddle.net/alexjamesbrown/FgVxY/3/

+9

'this.showRow ='は、 "observable"プロパティを上書きしていることを意味します。このプロパティは、オブザーバブルを使用しているときの値ではなく、関数です。 –

+0

James D'Angeloのポイントに追加するには、観測可能なプロパティの値を更新する場合は、その値をプロパティのパラメータとして渡します。 'this.showRow(false)'; – Quickhorn

答えて

5

のjsFiddle:

<table> 
    <tr data-bind="visible: showRow"><td>Some Text</td></tr> 
</table> 

とJavaScriptを次のように

var ViewModel = function() { 
    var self = this; 
    self.showRow = ko.observable(false); 
    self.toggleVisibility = function() { 

     self.showRow(!self.showRow()); 
     alert('showRow is now ' + self.showRow()); 
    }; 
}; 

ko.applyBindings(new ViewModel()); 

構文観察可能なプロパティに値を設定することです:self.showRow(value);

タグの内側に表示されます。

また、私はあなたのフィドルを修正して、javascriptを簡略化し、 "これ"に関する新しいコードプラクティスに従いました。 http://jsfiddle.net/FgVxY/4/

+0

サンプルが動作しません。クリックした "Toggle"は応答しません。 –

+1

これがなぜ選択された答えだったのか分かりません。問題は、元の質問のコメントが言っていることです。ノックアウト観察可能なものへの不適切な割り当てです。 –

関連する問題