1

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

服务器响应总是在 { errcode:xxx, data:{object array} } 的结构中

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

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

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

但是,当我从集合中获取时,事情不会像我预期的那样工作。响应将首先在集合中解析,然后在模型中再次解析。我希望集合可以将对象传递给新模型,而无需在模型级别再次解析。

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

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

4

2 回答 2

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);
}
于 2013-10-04T15:00:29.170 回答
0

试试这个来解析集合:

parse: function (response) {
    return response.data.map(function (data) {
        return {
            errcode: response.errcode,
            data: data
        };
    });
}
于 2013-10-04T14:10:44.073 回答