如何设置Collection的url

Run*_*tle 35 backbone.js

让我说我有:

var Book = Backbone.Model.extend();

var Collection = Backbone.Collection.extend({
  model: Book,
  url: '/books',
  initialize: function(){
    this.fetch();
  })
})
Run Code Online (Sandbox Code Playgroud)

我怎样才能改变Collectionurl实例化一个新的集合时?

var AdventureBooks = new Books({ url: '/books/adventure' }) 不起作用

var AdventureBooks = new Books({ category: 'adventure' })
Run Code Online (Sandbox Code Playgroud)

并在集合定义中:

url : '/books/' + this.category 也不起作用.

谢谢.

pon*_*zao 39

以下应该有效:

var AdventureBooks = new Books();
AdventureBooks.url = '/books/adventure';
Run Code Online (Sandbox Code Playgroud)


Ray*_*nos 28

var Book = Backbone.Model.extend({
  "url": function() {
    return '/books/' + this.get("category");
  }
});
Run Code Online (Sandbox Code Playgroud)

  • 此外,这是从模型中获取的属性.你在集合上使用网址怎么样?那是OP的问题. (13认同)

Juh*_*äki 13

由于某种原因,传递给Collection构造函数的参数(例如"url")未设置为该对象.该集合仅使用其中的少数(模型和比较器).

如果要通过构造函数传递url,则需要创建初始化方法,将必要的参数复制到对象:

var Book = Backbone.Model.extend({
    initialize: function(props) { 
        this.url = props.url;
    }
}
var book = new Book({url: "/books/all"});
Run Code Online (Sandbox Code Playgroud)

  • initialize方法实际上是:根据[文档](http://backbonejs.org/#Collection-constructor)初始化([models],[options]) (5认同)

Ruy*_*iaz 9

就像Daniel Patz所指出的那样,问题在于你如何实例化这个系列.我现在只是努力解决这个问题,所以我想我会更新这个,即使问题有些陈旧.

第一个参数预计是一系列模型,后面会有选项.这应该工作:

var AdventureBooks = new Books([], { url: '/books/adventure' })
Run Code Online (Sandbox Code Playgroud)

如果你想要一个动态URL,那么Raynos的回答可能就是你想要的.

  • 可以确认,这不再有效. (3认同)
  • 似乎不适用于Backbone 1.1 (2认同)