我正在尝试将 ko.observableArray 字符串绑定到模板,但我无法让模板获取数组内字符串的更改。
如果我绑定一组对象而不是一组字符串,我会获得对 JSON 的更新,但在我实际更改第一个非数组值之前,它们不会触发任何内容。但是,我更愿意找到一个字符串数组,因为我可以将数据模型直接发布回服务器而无需任何后处理。
如何获取要触发的字符串数组的更新,以及如何确保它们正确触发更改而无需更新非数组值?
如果无法绑定到可观察的字符串数组,如何在更新可观察数组内的对象时触发事件?
请参阅此处的示例:http: //jsfiddle.net/gcEHC/2/
在这个例子中,array3 的数据会在值改变时反映在模型中,但是对 array1 和 array2 的数据的改变永远不会出现。
JS:
var ViewModel = function() {
this.value = ko.observable("hi")
this.array1 = ko.observableArray(["hi", "there"]);
this.array2 = ko.observableArray([ko.observable("hi"), ko.observable("there")]);
this.array3 = ko.observableArray([{ data: "hi" }, { data: "there" }]);
};
ko.applyBindings(new ViewModel());
HTML:
<div class='liveExample'>
<p><input data-bind='value: value' /></p>
<div data-bind="foreach: array1">
<p><input data-bind='value: $data' /></p>
</div>
<div data-bind="foreach: array2">
<p><input data-bind='value: $data' /></p>
</div>
<div data-bind="foreach: array3">
<p><input data-bind='value: data' /></p>
</div>
</div>
<pre data-bind="text: ko.toJSON($data)"></pre>