我有一个简单的Backbone集合,它从(远程)资源中提取对象列表。但是,调用Collection.fetch
会因此错误而失败:
Object [object Object] has no method '_validate'
当猜测集合在添加时尝试为每个JSON对象创建模型实例时,我猜这种情况正在发生。任何人都可以解释为什么会发生这种情况吗?
这是我正在使用的代码。非常裸露的骨头......
/* Models */
var SomeModel = Backbone.View.extend({});
/* Collections */
var SomeCollection = Backbone.Collection.extend({
url: 'http://localhost:8000/api/some/resource/?format=json',
model: SomeModel,
parse: function(data) {
return data.objects
}
});
var SomeView = Backbone.View.extend({
collection: new SomeCollection(),
initialize: function() {
this.collection.fetch();
},
});
以下是资源响应的示例:
{
"meta": {
"count": 100
},
"objects": {
{"title": "Title", "id": 1},
{"title": "Title 2", "id": 2}
}
}
答案 0 :(得分:15)
您可能没有将集合的model
选项设置为有效的Backbone.Model子类。当集合获取数据时,它将实例化模型并调用set
,它将调用_validate
,这是一个有效的Backbone.Model
子类将拥有的,但您的实例不会。有关详细信息,请参阅the annotated source code for Backbone.Collection.fetch。
感谢您发布代码。这是问题所在。您的SomeModel
延伸View
而不是Model
。我的猜测是复制/粘贴/忘记编辑。
var SomeModel = Backbone.View.extend({});