我尝试在我的项目中使用骨干.但是当我尝试覆盖Backbone的解析方法时遇到了问题.服务器发回的数据比我想要的多.例如:我想要的是:
[{
id: "123",
name: "david"
},{
id: "456",
name: "kevin"
}]
Run Code Online (Sandbox Code Playgroud)
但服务器的结果是:
{
total: 1000,
items:[{
id: "123",
name: "david"
},{
id: "456",
name: "kevin"
}]
}
Run Code Online (Sandbox Code Playgroud)
所以我想在parse方法中处理结果并只返回数组.我怎样才能做到这一点?当我尝试我得到错误.我应该怎么做?
在骨干模型中,按照您希望的方式定义解析函数:
Model = Backbone.Model.extend({
parse: function () {
return {
id: this.get("id"),
name: this.get("name")
}
}
});
Run Code Online (Sandbox Code Playgroud)
但是,最好在模型初始值设定项中处理和设置数据,如下所示:
Model = Backbone.Model.extend({
initialize: function (attrs) {
try {
//TODO HERE: test for correct values and throw errors
// set object variables here
this.set({
name: attrs.name,
id: attrs.id
});
} catch (e) {
console.log(e);
}
}
});
Run Code Online (Sandbox Code Playgroud)
现在无需覆盖解析函数.这样您就可以知道模型正在处理的数据是好的,并且您可以设置它包含的变量.这避免了无效数据的许多错误.
数组中的每个项目都应该是一个子模型,这就是我上面所写的内容.您的父模型应如下所示:
Model = Backbone.Model.extend({
initialize: function (items) {
this.subModels = [];
items.forEach(function (item) {
this.subModels.push( new SubModel(item) )
});
}
});
Run Code Online (Sandbox Code Playgroud)
或作为集合:
Collection = Backbone.Collection.extend({
model: ItemModel,
});
Run Code Online (Sandbox Code Playgroud)
您将通过response.items