如何绑定可观察字符串的可编辑ko.observableArray?

sli*_*eed 6 knockout-2.0 knockout.js knockout-mvc

这是如何绑定ko.observableArray字符串的后续内容?

如何将可编辑的可观察字符串数组绑定到一组输入框?我不想绑定到一个对象数组,因为从服务器发送的底层JSON是一个字符串数组.

以下示例不起作用(在http://jsfiddle.net/LDNeA/上尝试).使用可观察字符串绑定对象数组是可以的,但直接绑定可观察字符串数组不起作用,并且模型不会更新.

重要的是文本框中的条目被映射回模型.

JS:

var ViewModel = function() {
    this.value = ko.observable("hi")
    this.array1 = ko.observableArray([ko.observable("hi"), ko.observable("there")]);
    this.array2 = ko.observableArray([{ data: ko.observable("hi") }, { data: ko.observable("there") }]);
};

ko.applyBindings(new ViewModel());
Run Code Online (Sandbox Code Playgroud)

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>

<pre data-bind="text: ko.toJSON($data)"></pre>
Run Code Online (Sandbox Code Playgroud)

sli*_*eed 14

正如@Tyrsius发布的链接所指出的,这是Knockout中的一个错误(?).

最简单的解决方法是使用$parent.items()[$index()],如这个小提琴:http://jsfiddle.net/r8fSg/.请注意,$parent.items()这是foreach中使用的observableArray项.

<div data-bind="foreach: items">
    <p><input data-bind='value: $parent.items()[$index()]' /></p> 
</div>

<pre data-bind="text: ko.toJSON($data)"></pre>
Run Code Online (Sandbox Code Playgroud)

而型号:

var ViewModel = function() {
    this.items = ko.observableArray([ko.observable("hi"), ko.observable("hi")]);
};

ko.applyBindings(new ViewModel());
Run Code Online (Sandbox Code Playgroud)