如何仅在集合级别解析而不是在骨干中的模型和集合级别进行解析

时间:2013-10-04 09:19:15

标签: backbone.js

作为骨干的新手,我在从服务器获取数据时遇到了问题。

服务器响应始终处于结构中 {  ERRCODE:XXX,  data:{object array} }

我在模型和集合中定义了解析:

parse:funciton(response){
   if(100==response.errcode){
      return response.data;
}

所以当我从模型中保存/获取时,它可以正常工作。

但是,当我从收藏中获取时,事情将无法按照我的预期进行。 首先在集合中解析响应,然后在模型中再次解析。 我希望集合可以将对象传递给新模型,而无需在模型级别再次解析。

我尝试了fetch {parse:false}。但是,这将在集合和模型级别禁用解析。

我可以在集合级别调用fetch时在模型级别禁用解析吗?谢谢!

2 个答案:

答案 0 :(得分:1)

你可以简单地将另一个选项传递给你的集合获取方法,如下所示:

collection.fetch({parseModel: false});

然后检查模型的parse方法是否存在此选项:

parse: function(resp, options) {
   if(!options.parseModel) return resp;
   // Do your parsing here
}

更好的是,您可以在集合的fetch方法中默认包含该选项:

fetch: function(options) {
   options = _.extend({parseModel: false}, options);
   return Backbone.Collection.prototype.fetch.call(this, options);
}

当然,您还必须为模型的fetch方法设置默认值:

fetch: function(options) {
   options = _.extend({parseModel: true}, options);
   return Backbone.Model.prototype.fetch.call(this, options);
}

答案 1 :(得分:0)

尝试使用此解析集合:

parse: function (response) {
    return response.data.map(function (data) {
        return {
            errcode: response.errcode,
            data: data
        };
    });
}