我有一个模特
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});
有人可以帮我吗?
答案 0 :(得分:3)
如果要创建模型/集合 - 默认情况下,您必须为资源指定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才能使模型工作。
答案 1 :(得分:1)
这是因为destroy()函数也会调用Backbone.sync来更新服务器,而不仅仅是前端的模型。 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();
}
使用您的代码。