2011-12-24 32 views
2

我使用Knockout.js显示的bool数组作为一系列复选框得到了下面的代码:

<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是unwrapped的值。

即使设置点击处理程序也不起作用,因为发送到您的处理程序的数据也被解包。

无赖。看起来像这样做的唯一方法是将你的observable包装到一个对象中,而另一个间接层。

相关问题