我相信,在此过程中的某个地方,我的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也是如此。
我有点难过。
答案 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;
}
});