假设我有这个相同类型对象的数组:
var people = [
{ status: 0, name: "name1"},
{ status: 1, name: "name2"}
];
我不仅希望它是 observableArray,而且我还希望仅观察每个对象的状态属性。
假设可以添加或删除对象本身。这些对象中的任何一个的名称属性都不会改变,所以我真的不需要观察名称,但每个对象的状态可能会改变,因此让它可观察会很酷。
是否可以使用带有一些很酷的 hack 语法的 knockout 实用程序来映射它,或者我是否必须遍历每个对象并将其状态属性映射到可观察的,或者让整个数组及其对象属性都可观察?
最佳答案
您可以使用 ko.mapping.fromJS
var vm = ko.mapping.fromJS(people,{
create: function(options){
return {
status : ko.observable(options.data.status), // observable
name: options.data.name, // non observable
}
}
});
现在 vm 是一个包含对象的 observableArray,其中状态是可观察的,名称是常规属性。
@Patryk:
如果您有很多属性并且只想将一个转换为可观察的,您可以这样做。
var o = ko.mapping.fromJS(people,{create: function(options){
// clone item
var item = ko.utils.extend(options.data, {});
// replace status property by an observable
item.status = ko.observable(options.data.status);
return item;
}});
你也可以使用 observe带映射参数
var mapping = {
create: function (options) {
return ko.mapping.fromJS(options.data, {'observe': ["status"]});
}
};
var o = ko.mapping.fromJS(people, mapping);
希望对你有帮助。
关于javascript - 将某些 observableArray 对象属性转换为 observable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17925146/