0

我有一个模型

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});

有人可以帮我吗?

4

2 回答 2

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 才能使模型工作。

于 2013-01-03T07:33:53.673 回答
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();
  } 

工作你的代码。

于 2013-08-14T05:04:11.830 回答