2011-12-24 9 views
2

私は、チェックボックスのシリーズとしてboolsの配列を表示するためにKnockout.jsを使用して、次のコードを持っている:

<table> 
    <tr data-bind="foreach: Array"> 
    <td><input type=checkbox data-bind="checked:$data"></td> 
    </tr> 
    <tr data-bind="foreach: Array"> 
    <td data-bind="text:$data"></td> 
    </tr> 
</table> 
<button data-bind="click: toggle0">Toggle Element 0</button> 

<script> 
var simpleModel = { 
    "Array" : ko.observableArray([ko.observable(false), 
           ko.observable(false), 
           ko.observable(true)]), 
    "toggle0" : function() { 
     simpleModel.Array()[0](!simpleModel.Array()[0]()); 
    } 
}; 
ko.applyBindings(simpleModel); 
</script> 

あなたはhttp://jsfiddle.net/tP9Dm/3/を見れば、あなたはそれを見ることができ、チェックボックスは、変化に対応しながら、ビューモデルは、チェックボックスの変更に応答しません。

https://groups.google.com/d/msg/knockoutjs/-dHpOg5ZBPI/1q4iqdTlKvUJによれば、$dataはforeachループによってアンラップされているように見えるので、data-bindはモデルを更新するために使用することを知らないということです。

明らかに、配列に単純ブール値の代わりにオブジェクトが含まれるようにすることでこれを修正できますが、不要な余分な間接参照層のように見えます。変更をモデルに伝播する簡単な方法はありますか?

答えて

1

この場合、$ dataはラップされていない値なので、これを行う方法はないようです。

ハンドラに送信されたデータもアンラップされるため、クリックハンドラを設定することもできません。

バマー。これを行う唯一の方法は、オブザーバブルをオブジェクト、つまりインダイレクションの別のレイヤにラップすることです。

関連する問題