如何使可观察数组中的对象属性可观察?
问题描述:
当在敲除映射中使用'create'选项时,我们将使数组成为可观察数组。 但是,我们如何让可观察数组中的每个对象的属性都是可观察的?如何使可观察数组中的对象属性可观察?
在这个从knockout文档中的例子中,children数组是一个可观察数组,但我想让每个对象字面值中的id,name等所有元素都成为可观察对象。我们如何实现这一目标。只需在创建块中的每个新对象上放置一个ko.observable
?
var data = {
name: 'Graham',
children: [
{ id : 1, name : 'Lisa' }
]
};
// Your custom data model
var myChildModel = function (data) {
this.id = data.id;
this.name = data.name;
};
var mapping = {
'children': {
create: function(options) {
return new myChildModel(options.data);
}
}
};
var viewModel = ko.mapping.fromJS(data, mapping);
答
- 的对象的所有属性被转换为可观察到的。
因此,倒在节中有关使用“创造”它指出
当然,里面的创建回调,你可以做另一个呼叫 ko.mapping.fromJS如果自定义对象的构造你希望。
提供的例子是如下:
var myChildModel = function(data) {
ko.mapping.fromJS(data, {}, this);
this.nameLength = ko.computed(function() {
return this.name().length;
}, this);
}
自然地,这将转换所有的属性。然后可以将更详细的配置专门应用于该映射调用来处理自定义需求。
答
简单的回答是使物体的观察到
var myChildModel = function (data) {
this.id = ko.observable(data.id);
this.name = ko.observable(data.name);
;
属性它也可能是最简单的方法,尽管有其他人
答
简单:
var viewModel = ko.mapping.fromJS(data);
它做的一切,使两个属性和数组都可观察。此方法的第二个参数仅用于定制目的。如果你不需要,你不必使用它!