如何在Knockout中从父observable订阅child observable

时间:2013-11-19 13:05:39

标签: javascript arrays knockout.js ko.observablearray

我有像这样的DEMO

的KO观察者
var  list = function(){
    var array  = [{val :'1'}, {val :'2'}, {val :'3'}, {val :'4'}];
    var that = this;
    this.inputs = ko.observableArray();

    array.forEach(function(obj){
        var val = ko.observable(obj.val);
        that.inputs.push(val);

        //Subscribe to each element
        val.subscribe(function(val){
           console.log(val);
        });

    });
}

ko.applyBindings(new list());

我正在使用inputs填充

等字段中的数据
 <ul data-bind="foreach: inputs">
    <input type="text" data-bind="value :$data" />
</ul>

因此,当我更改输入数据时,有一种方法可以知道父项是否已使用新输入的数据进行更新,因为所有值都是可观察的。

按照knockout-js-observable-array-changes-to-individual-observable-items

我将每个项目视为可观察的,并尝试订阅更改

//Subscribe to each element
   val.subscribe(function(val){
       console.log(val);
   });

但这也不起作用,如何实施此knockout-js-observable-array-changes-to-individual-observable-items解决方案。

1 个答案:

答案 0 :(得分:1)

请勿将ko.observable直接放入ko.observableArray创建具有可观察属性的对象

所以将数组填充代码更改为:

var val = ko.observable(obj.val);
that.obs.push({val: val});

您的观点:

<ul data-bind="foreach: inputs">
    <input type="text" data-bind="value: val" />
</ul>

演示JSFiddle