Backbone集合的模型 - 对象不正确的结构?

时间:2013-10-16 10:55:28

标签: javascript backbone.js backbone-model backbone-collections

我相信,在此过程中的某个地方,我的Backbone集合并没有正确存储他们的模型。我也使用backbone-pageable来创建分页集合,我的主干应用程序基于https://github.com/alessioalex/ClientManager和一些骨干教程。

基本上,据我所知,Backbone Collections应该有一个模型属性:

Object
  models: Array
    0: Object
      model
      model, etc

但是我似乎有这样的结构:

Object
  models: Array
    0: Object
      attributes: Object
        tasks: Array (from my server JSON response)
        total_match, etc (other variables for pagination)

因此,在我的模板中,我总是必须使用任务[0]。而不仅仅是tasks.each

这也意味着,在向集合添加模型时,它们不会添加到任务中的模型数组中,而是Backbone在模型中创建了另一个数组,使其变为:

Object
  models: Array
    0: Object
      attributes: Object
        tasks: Array (from my server JSON response)
        total_match, etc (other variables for pagination)
    1: Object
      (new model attributes)

这意味着我的模板代码,搜索任务[0]不会捡起它。这也意味着对于我的集合,我不能使用collection.get(id),它什么都不返回 - 即使使用正确的ID和模型的指定IDAttribute也是如此。

我有点难过。

1 个答案:

答案 0 :(得分:0)

您的服务器似乎正在返回嵌套在JSON响应中的tasks数组。为了让Backbone知道如何正确解析JSON,您需要覆盖parse()方法并告诉它使用tasks数组作为模型的源。

var MyModel = Backbone.Model.extend({});    
var MyCollection = Backbone.Collection.extend({
        model: MyModel,
        parse: function(response) {
           //tell Backbone to turn each element in 'tasks' into an instance of MyModel
           return response.tasks;  
        }
});