当使用knockout.js的knockout.mapping插件时,我可以自定义集合中的项目创建方式如下: -
var ItemModel = function (data) {
ko.mapping.fromJS(data, {}, this);
this.FooProperty = ...;
};
var mapping = {
'Items': {
create: function (options) {
return new ItemModel(options.data);
}
}
}
this.Items = ko.mapping.fromJS(data,mapping);
这假设数据包含属性“Items”,其中包含一个集合。但是,如果数据只是一个JSON数组呢?如何将创建函数挂钩到传入数据的顶级根目录中?
从查看文档看,映射对象中的键似乎可以是要处理的数据的属性名称,或者它们可以是include,ignore,copy之一。从这一点来看,我无法看到如何实现我想要的东西,除非我将传入的JSON包装到具有属性的对象中,映射它,然后打开结果。
答案 0 :(得分:3)
您可以在映射对象的顶层放置一个create
函数来处理根对象:
像:
var mapping = {
create: function(options) {
}
};
或者,你可以像以下一样传递它:
ko.mapping.fromJS({ Items: data });
但听起来好像你试图避免这样做。