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
不知道用它来更新模型。
显然,我可以通过使数组包含对象而不是简单的布尔值来解决这个问题,但是这看起来应该是一个不必要的额外间接层。是否有更简单的方式将更改传播回模型?