-->

我怎样才能绑定字符串ko.observableArray?(How can I bind a ko.

2019-08-18 16:08发布

我想字符串ko.observableArray绑定到一个模板,但我无法获得模板拿起在数组中的字符串的变化。

如果我绑定的一组对象,而不是一组字符串,我得到更新到JSON,但他们不会引发任何东西,直到我真正改变第一,非数组值。 我宁愿找一个字符串数组,但是,我就能发布数据模型直接返回到服务器,而无需任何后期处理。

我怎样才能获得更新我的琴弦引发的数组,我怎么能确保他们正确地触发的变化,而不必更新非数组值?

如果这是不可能绑定到字符串数组观察到的,我怎么能得到更新观测到阵列内的对象时,事件触发?

在这里看到的例子: http://jsfiddle.net/gcEHC/2/

在这个例子中,当值发生改变,但改变了array1和数组2的数据永远不会显示ARRAY3的数据将反映在模型中。

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>

Answer 1:

从文档:

简单地把对象装进observableArray不作眼前一亮观察到该对象的属性。 当然,你可以让这些属性可观察到的,如果你愿意的话,但是这是一个独立的选择。 一个observableArray只跟踪哪些对象它保持,并且当对象被添加或删除通知侦听。

你需要创建一个具有可观察性(你的字符串)的对象。 然后,让这些对象的observableArray。

例如,这里有一个更新的对象绑定2秒后应用的属性的示例:

var item = function(text) {
    var self = this;

    self.Name = ko.observable(text);
}

var vm = {
    items: ko.observableArray([
        new item('one'),
        new item('two'),
        new item('three')
        ])
}

ko.applyBindings(vm);
setTimeout(function() {
    vm.items()[1].Name('updated!');
}, 2000);

这里有一个完整的,可运行的样本: http://jsfiddle.net/psteele/z6gbM/



Answer 2:

在KO 3,如果指向$ RAWDATA的绑定,例如数组2按预期工作。



文章来源: How can I bind a ko.observableArray of strings?