Backbone JS模型和集合URL

时间:2013-05-31 16:38:15

标签: backbone.js

如果我有一个名为“Book”的模型和一个名为“Library”的集合,如下所示:

app.Book = Backbone.Model.extend({
    defaults: {
        title: 'No title',
        author: 'Unknown'
    }
});

app.Library = Backbone.Collection.extend({
    model: app.Book,
    url: '/api/books'
});

当我致电BookInstance.save()时,如何使用该网址?它是从集合中派生出来的吗?

Backbone.model中有2个选项:urlurlRoot。这些之间的目的和区别是什么?

Backbone.collection中,只有一个参数url。这总是对RESTFUL api的GET请求吗?

2 个答案:

答案 0 :(得分:35)

基本上,构建模型的URL有三种可能性:

  • 如果模型对象存在于集合中,则其url方法将返回由collection.urlmodel.id组成的地址:[collection.url]/[id]

  • 如果您不想在集合中使用模型,则可以使用model.urlRoot的值而不是collection.url片段,从而产生以下模式:{{ 1}}。

  • 最后,如果您不打算将更多给定类型的模型保留到服务器,或者在创建每个模型时定义URL,则可以直接为{{1}分配值}。

集合仅发送GET请求 - 获取模型的JSON数据数组。对于保存,删除和更新,使用单个模型的[urlRoot]/[id](POST / PUT / PATCH)和model.url(DELETE)方法。

Here's the source code of Backbone.Model.url,它可以帮到你:

save()

答案 1 :(得分:12)

在模型中

  1. urlRoot 用于模型。
  2. url 用于模型的实例。
  3. 如果 urlRoot 存在 然后book.fetch()将获取给定 id 的数据,例如

    var Book = Backbone.Model.extend({urlRoot: 'books' });
    var book = new Book({id: 1});
    book.fetch();  // will get /books/1
    
    var Book = Backbone.Model.extend({});
    var book = new Book({url: 'books/1'});
    book.fetch();  // will get /books/1
    
    
    var Books = Backbone.Collection.extend({model: Book});
    var books = new Books({ /*....*/ });
    books.fetch(); // will get /books/ 
    

    您可以参考骨干模型urlRoot源代码here

    我希望你有意义,祝你好运。