2013-06-04 143 views
11

我想实现一个可观察数组,并在该数组内部应该有可观察对象(JS对象)。并在视图中我迭代这个数组并获取对象并显示对象属性。假设有一个像下面这样的对象,如何在可观察数组内部敲除可观察对象

{"name":"john","age":21,"address":"No 25"} 

想象一下,可观察数组是由上述对象组成的。

然后我想特定对象的改变单一财产(例如名称),并需要看到的视图的变化。

我怎样才能做到这一点使用淘汰赛?

谢谢。

回答

9

如果你在视图模型中设置你的用户并且用knockout mapping来映射它,你应该得到想要的结果。例如:

myObservableArray.push(new UserViewModel({"name":"john","age":21,"address":"No 25"})); 

var UserViewModel = function(data){ 
    var self = this; 
    ko.mapping.fromJS(data, {}, self);  
} 

这样每个映射的属性都将是可观察的,当它们改变时,这将反映在您的标记中。

+0

截至目前,答案中引用的插件似乎已被放弃。 –

+0

它仍然适用于最新版本的Knockout(3.4.0) –

2

要将模型转换为可观察视图模型,可以使用ko.utils.arrayMapko.mapping.fromJS

var source = [{"name":"john","age":21,"address":"No 25"}]; 
var vm = ko.utils.arrayMap(source, function (item) { 
    return ko.mapping.fromJS(item) 
}); 

See fiddle

2

简单地定义一个新的模式为您的数据项,使每个属性可观察到的,就像这样:

var dataItemModel = function (name, age, address) { 
    this.name = ko.observable(name); 
    this.age = ko.observable(age); 
    this.address = ko.observable(address); 
} 

当你对他们的数据,循环,创建dataItemModel (它有可观察的属性),然后将此项目添加到您的ObservableArray