Backbone.js Collection fetch()抛出未捕获类型错误:无法读取属性'idAttribu

Backbone.js Collection fetch() throws Uncaught TypeError: Cannot read property 'idAttribute' of undefined

本文关键字:错误 读取 属性 idAttribu 类型 fetch Collection js Backbone      更新时间:2023-09-26

我正在努力学习Backbone.js

它使它能够获取、放置和删除单个模型。但是,当我创建集合时,fetch方法会给出以下错误:未捕获的类型错误:无法读取未定义(主干.js:683)的属性"idAttribute"

这是我正在尝试的代码:

Person = Backbone.Model.extend({
    urlRoot: '/people'
});
PersonList = Backbone.Collection.extend({
    model: 'Person',
    url: '/people'
});
var personList = new PersonList();
personList.fetch();

在获取时,服务器返回以下JSON,我认为这是正确的:

[{"id":1,"name":"Matt","description":"Worker"},{"id":3,"name":"Test","description":"Test person"}]

我使用的是jQuery 2.0.3(也尝试过1.10.2)、Undercore.js 1.5.2和Backbone.js 1.1.0

我做错了什么?

当扩展Backbone.Collection时,model应该是对构造函数的引用,而不是字符串。因此,您需要删除Person中的引号。

PersonList = Backbone.Collection.extend({
  model: Person,
  url: '/people'
});

这是Collection模型的文档。

除了@fbynite答案。

您还需要确保所引用的对象是有效的主干模型(从Backbone.Model扩展而来的对象)。

因此,在调用model/collection/view的js文件时,请确保模型文件的调用时间早于集合文件。

在我的示例中,我已经花了数小时进行了调查,我的问题是在模型之前启动集合,所以我建议不要使用的行:App.AppModel = App.AppModel || {};。它不那么"安全",但最好让代码崩溃,这样你就能看到哪里出了问题。

window.App = window.App || {};
App.AppModel = App.AppModel || {}; //DO not use this line!!
App.AppCollection = Backbone.Collection.extend({    
    model: App.AppModel,
});