knockout.js - 如何绑定(bind) ko.observableArray 字符串?

标签 knockout.js knockout-2.0 knockout-mvc

我正在尝试将 ko.observableArray 字符串绑定(bind)到模板,但我无法让模板获取数组内字符串的更改。

如果我绑定(bind)一组对象而不是一组字符串,我会获得对 JSON 的更新,但在我实际更改第一个非数组值之前,它们不会触发任何内容。但是,我更愿意找到一个字符串数组,因为我可以将数据模型直接发布回服务器而无需任何后处理。

如何获取要触发的字符串数组的更新,以及如何确保它们正确触发更改而无需更新非数组值?

如果无法绑定(bind)到可观察的字符串数组,如何在更新可观察数组内的对象时触发事件?

请参阅此处的示例:http://jsfiddle.net/gcEHC/2/

在这个例子中,array3 的数据会在值改变时反射(reflect)在模型中,但是对 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>

最佳答案

在 KO 3 中,如果您在绑定(bind)中指向 $rawData,array2 示例将按预期工作。

关于knockout.js - 如何绑定(bind) ko.observableArray 字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15747211/

相关文章:

javascript - 如何创建一个knockout.js 可观察值数组?

javascript - 使用 knockout 将图像源与文件输入绑定(bind)

javascript - KnockoutJS 在值后加载选项时丢失以前的值

javascript - knockout 不更新输入值随日期选择器更改

knockout.js - KnockoutJS 通过另一个 ObservableArray 过滤 ObservableArray

javascript - knockout 计算未更新

asp.net-mvc - 如何对 MVC 传递的每个项目列表的属性应用 knockout 验证?

javascript - 通过对象初始化可观察对象

knockout.js - 我们是否应该在调用 ko.applyBindings 之前等待 DOM 加载

javascript - 可通过继承观察 knockout