0

我相信,在此过程中,我的 Backbone 集合没有正确存储它们的模型。我还使用骨干分页来分页集合,我的骨干应用程序基于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)

因此,在我的模板中,我总是必须使用 tasks[0].each 而不仅仅是 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。

我有点难过。

4

1 回答 1

0

您的服务器似乎正在返回一个tasks嵌套在 JSON 响应中的数组。为了让 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;  
        }
});
于 2013-10-16T21:00:40.307 回答