Javascript 无法正确绑定ObservalArray of Observales

Javascript 无法正确绑定ObservalArray of Observales,javascript,knockout.js,ko.observablearray,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-bi

我有下面的代码,它应该绑定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());
上传
函数vm(){
var self=这个;
this.langs=ko.observearray([]);
this.initiate=函数(){
self.langs=ko.observearray([]);
对于(变量i=0;i<4;i++){
自我语言推动(可观察(“开始”);
}
}
这个.initiate();
this.loadTag=函数(){
对于(变量i=0;i<4;i++){
self.langs()[i](i);
}
}
}
应用绑定(新vm());
JS小提琴是


正如您在开始时看到的,它正确绑定,并且在加载标签时绑定也可以工作。但问题是,当我修改输入中的元素时,绑定不会传播。我想我错过了一些非常简单的东西,但找不到什么。

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

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

演示

从:

$rawData

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


哇,我不知道。我甚至都没听说过。谢谢。这是KO 3.0中新增的功能。在此之前,您必须知道,在observablearray中直接拥有可观测对象并不是真正受支持的。