在收集中出现错误.create: Uncaught Error: A "url"属性或函数必须指定

Getting error in Collection.create : Uncaught Error: A "url" property or function must be specified

本文关键字:quot 属性 url 函数 集中 错误 Error Uncaught create      更新时间:2023-09-26

我有一个模型

var TodoModel = Backbone.Model.extend({
    defaults: {
        title : '',
        completed: false
    }
});

当我试图使用Collection.create方法将此模型添加到集合时,我得到一个错误

未捕获错误:必须指定"url"属性或函数

我尝试了以下方法

var TodoCollection = Backbone.Collection.extend({
    model : TodoModel,
});
todoCollection.create({title:'Try out code examples', completed:true});
有人能帮我一下吗?

如果您正在创建一个模型/集合——默认情况下您必须为资源指定一个url。您可以这样做:

var TodoModel = Backbone.Model.extend({
    defaults: {
        title : '',
        completed: false
    }
});
var TodoCollection = Backbone.Collection.extend({
    url: '/todos',
    model : TodoModel,
});

参见http://backbonejs.org/#Collection-url了解更多详细信息。

我认为这里的混乱来自Backbone.js的Todo样本,它使用本地存储(http://documentcloud.github.com/backbone/docs/backbone-localstorage.html)。如果跳到本地存储代码的底部,可以看到Backbone。设置sync。通过这样做,我们改变了创建模型的默认行为,使其不再需要Url。在大多数骨干应用程序中,情况并非如此,需要一个服务器端URL才能使模型工作。

这是因为destroy()函数将调用Backbone。同步更新服务器,而不仅仅是你的模型在前端。http://backbonejs.org/Model-destroy

所以,如果你使用REST来同步你的数据,你需要在你的模型中设置一个url属性,以便Backbone知道向哪里发送请求:

Backbone.Model.extend({
    url: "http://myapi.com/"
})

为了更灵活,您还可以设置urlRoot: http://backbonejs.org/#Model-urlRoot

或者你可以加上

 Backbone.sync = function(method, model, success, error){
    success();
  }