Backbone.Collection.fetch抛出“对象[...]没有方法'_validate'”

时间:2012-05-19 16:29:36

标签: javascript backbone.js

我有一个简单的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}
  }
}

1 个答案:

答案 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({});