我想实现一个可观察的数组,在该数组内部应该有可观察的对象(JS 对象)。在视图中,我正在迭代这个数组并获取对象并显示对象属性。假设有一个像下面这样的对象,
{"name":"john","age":21,"address":"No 25"}
想象一下 observable 数组由上面的对象组成。
然后我想更改特定对象的单个属性 (例如名称)并需要查看视图上的更改。
我怎样才能使用淘汰赛做到这一点?
谢谢。
我想实现一个可观察的数组,在该数组内部应该有可观察的对象(JS 对象)。在视图中,我正在迭代这个数组并获取对象并显示对象属性。假设有一个像下面这样的对象,
{"name":"john","age":21,"address":"No 25"}
想象一下 observable 数组由上面的对象组成。
然后我想更改特定对象的单个属性 (例如名称)并需要查看视图上的更改。
我怎样才能使用淘汰赛做到这一点?
谢谢。
如果您在 viewModel 中设置用户并使用剔除映射对其进行映射,您应该会得到所需的结果。就像是:
myObservableArray.push(new UserViewModel( {"name":"john","age":21,"address":"No 25"} ));
var UserViewModel = function(data){
var self = this;
ko.mapping.fromJS(data, {}, self);
}
这样每个映射的属性都将是可观察的,当它们发生变化时,这将反映在您的标记中。
要将模型转换为可观察的视图模型,您可以使用ko.utils.arrayMap和 ko.mapping.fromJS。
var source = [{"name":"john","age":21,"address":"No 25"}];
var vm = ko.utils.arrayMap(source, function (item) {
return ko.mapping.fromJS(item)
});
只需为您的数据项定义一个新模型,并使每个属性都可观察,如下所示:
var dataItemModel = function (name, age, address) {
this.name = ko.observable(name);
this.age = ko.observable(age);
this.address = ko.observable(address);
}
当您获取数据时,遍历它们,创建您的dataItemModel
(具有可观察属性),然后将此项目添加到您的ObservableArray
.