我有一个返回以下表单数据的服务(我可以为此添加字段,但我无法更改层次结构):
{
Sections: {
3a: [
{
/* Item definition */
ID: 1,
Text: "Completed Form INNSAMEM002",
...
},
...
],
3b: [
...
],
...
}
}
我想使用映射插件为每个项目定义调用自定义构造函数,但是遇到了麻烦,因为它被分成了几个部分;所以,映射可以这样工作:
var _mapping = {
'3a': {
create: function(o) { return new ItemModel(o.data); }
}
});
但是,部分名称无法提前知道。
我可以浏览AJAX数据,查找所有部分,并在运行之前生成映射配置,但只是想知道是否有更好的方法?
解决方案:CrimsonChris的答案给了我这样做的方法;最终的映射是:
var _mapping = {
'Sections': {
create:
function(o)
{
var res = {};
$.each(o.data,
function(sectionkey, section)
{
var secres = [];
$.each(section,
function(itemindex, item)
{
secres.push(new ItemModel(item));
}
);
res[sectionkey] = secres;
}
);
return res;
}
}
};
答案 0 :(得分:0)
您可以在响应中循环遍历Sections
的属性以获取每个部分。然后将每个部分的项目映射到ItemModel
。
var _mapping = {
'Sections': {
create: function (options) {
var sections = [];
for (var sectionName in options.data) {
sections.push(new SectionModel(options.data[sectionName], sectionName);
}
return sections;
}
}
}
function SectionModel(items, sectionName) {
this.items = items.map((item) => new ItemModel(item));
this.sectionName = sectionName;
}