pat*_*ryk 5 javascript knockout-mapping-plugin knockout.js
假设我有这个相同类型的对象数组:
var people = [
{ status: 0, name: "name1"},
{ status: 1, name: "name2"}
];
Run Code Online (Sandbox Code Playgroud)
我希望它不仅是observableArray,而且我想要观察每个对象的状态属性.
想象一下,可能会添加或删除对象本身.任何这些对象的name属性都不会改变,因此我不需要观察名称,但每个对象的状态可能会发生变化,因此让它可观察是很酷的.
是否可以使用一些很酷的黑客语法将其与knockout实用程序一起映射,或者我是否必须迭代每个对象并将其status属性映射到observable,或者让整个数组及其对象属性可观察?
您可以使用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
}
}
});
Run Code Online (Sandbox Code Playgroud)
现在,vm是一个observableArray,它包含状态是可观察的对象,name是常规属性.
@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;
}});
Run Code Online (Sandbox Code Playgroud)
您还可以将observe与mapping参数一起使用
var mapping = {
create: function (options) {
return ko.mapping.fromJS(options.data, {'observe': ["status"]});
}
};
var o = ko.mapping.fromJS(people, mapping);
Run Code Online (Sandbox Code Playgroud)
我希望它有所帮助.
| 归档时间: |
|
| 查看次数: |
2112 次 |
| 最近记录: |