无法正确绑定observableArray的可观察对象

时间:2014-06-18 08:58:09

标签: javascript knockout.js ko.observablearray

我有以下代码,它们应该绑定observableArray of observables。

<button data-bind="click: loadTag">Upload</button>
<span data-bind="foreach: langs">
    <input data-bind="value: $data, valueUpdate: 'afterkeydown'"/>
</span>

<div data-bind = "text: ko.toJS(langs)">

function vm() {
    var self = this;
    this.langs      = ko.observableArray([]);

    this.initiate = function(){
        self.langs = ko.observableArray([]);
        for (var i = 0; i < 4; i++){
            self.langs.push(ko.observable('start'));
        }
    }
    this.initiate();

    this.loadTag = function(){
        for (var i = 0; i < 4; i++){
            self.langs()[i](i);
        }
    }
}

ko.applyBindings(new vm());

JS小提琴是available

正如您在开头看到的那样,它正确绑定,并且绑定在loadTag时也能正常工作。但问题是当我修改输入中的元素时,绑定不会传播。我想我错过了一些非常简单但却无法找到的东西。

1 个答案:

答案 0 :(得分:3)

如果你的数组中直接有ko.observable个对象,则需要使用$rawData而不是$data直接绑定到可观察对象本身而不是它们的值:

<span data-bind="foreach: langs">
    <input data-bind="value: $rawData, valueUpdate: 'afterkeydown'"/>
</span>

演示JSFiddle

来自documentation

  

<强> $rawData

     

这是当前上下文中的原始视图模型值。通常这个   将与$data相同,但如果视图模型提供给Knockout   被包裹在一个可观察的,$data将是未包装的视图模型,   而$rawData本身就是可观察的。