javascript - Backbone.Collection.fetch 抛出 "Object [...] has no method ' _validate'”

标签 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}
  }
}

最佳答案

您可能没有将集合的 model 选项设置为有效的 Backbone.Model 子类。当集合获取数据时,它将实例化模型并调用 set,这将调用 _validate,这是一个有效的 Backbone.Model 子类,但您的实例没有。参见 the annotated source code for Backbone.Collection.fetch了解详情。

感谢您发布代码。这就是问题所在。您的 SomeModel 扩展了 View 而不是 Model。我的猜测是复制/粘贴/忘记编辑。

var SomeModel = Backbone.View.extend({});

关于javascript - Backbone.Collection.fetch 抛出 "Object [...] has no method ' _validate'”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10666989/

相关文章:

javascript - 如何从样式化组件 (React) 访问 CSS 值?

javascript - Cypress - 是否可以在提示中验证文本?

javascript - 主干本地存储和关系

javascript - 如何重新启动/重新初始化 Backbone Marionette 模块

javascript - 主干模型节省了客户端和服务器之间的更改循环

javascript - 如何获取连接 JSPLUMB 中的端点标签?

javascript - 缩放更改时不会触发谷歌地图 v3 zoom_changed 事件

javascript - 如何将 header 设置为 $http.post 方法 AngularJS 1.3.5?

javascript - 从事件回调中引用包含主干 View ?

javascript - 生产中的主干模板