让我说我有:
var Book = Backbone.Model.extend();
var Collection = Backbone.Collection.extend({
model: Book,
url: '/books',
initialize: function(){
this.fetch();
})
})
如何在实例化新集合时更改Collection
的{{1}}?
url
不起作用
var AdventureBooks = new Books({ url: '/books/adventure' })
并在Collection定义中:
var AdventureBooks = new Books({ category: 'adventure' })
也不起作用。
感谢。
答案 0 :(得分:39)
以下内容应该有效:
var AdventureBooks = new Books();
AdventureBooks.url = '/books/adventure';
答案 1 :(得分:28)
var Book = Backbone.Model.extend({
"url": function() {
return '/books/' + this.get("category");
}
});
答案 2 :(得分:13)
由于某种原因,传递给Collection构造函数的参数(例如“url”)未设置为该对象。该集合仅使用其中的少数(模型和比较器)。
如果你想通过构造函数传递url,你需要创建初始化方法,将必要的参数复制到对象:
var Book = Backbone.Model.extend({
initialize: function(props) {
this.url = props.url;
}
}
var book = new Book({url: "/books/all"});
答案 3 :(得分:9)
像Daniel Patz pointed out 一样,问题在于你如何实例化集合。我现在只是努力解决这个问题,所以我想我会更新这个,即使问题有些陈旧。
第一个参数应该是一个模型数组,后面会有选项。这应该有效:
var AdventureBooks = new Books([], { url: '/books/adventure' })
如果你想要一个动态网址,那么Raynos的回答可能就是你要做的。
答案 4 :(得分:3)
如果您想为您的收藏品设置动态网址,请尝试使用此网址(使用主干网1.1.2进行测试):
创建骨干集合的实例并将动态url参数作为选项传递(options对象需要是第二个参数,因为第一个参数是可选的模型数组):
var tweetsCollection = new TweetsCollection(null, { userId: 'u123' });
然后在集合内部创建一个动态url函数,该函数使用options对象中的值:
var TweetsCollection = Backbone.Collection.extend({
url: function() {
return '/api/tweets/' + this.options.userId;
},
model: TweetModel
});
答案 5 :(得分:2)
对我来说最好的解决方案是初始化方法,请看这个例子:
Entities.MyCollection = Backbone.Collection.extend({
model: Entities.MyModel,
initialize: function(models,options) {
this.url = (options||{}).url || "defaultURL";
},
}
按如下方式使用:
var items = new Entities.MyCollection(); //default URL
var items = new Entities.MyCollection([],{url:'newURL'}); //changed URL
答案 6 :(得分:1)
我知道这是一个迟到的回复,但我有一个类似但稍微复杂的情况,所选择的答案并没有真正帮助我。
我有一个条件集合,每个实验模型都有多个条件,我需要我的网址为/ api / experiments /:experimentId / conditions,但我不知道如何从空访问experimentId条件收集。
在我的条件集合url函数中,我做了一个console.log(this.toJSON())并发现了 Backbone在空集合中插入一个虚拟模型,其中包含您在创建时传递的任何属性。
这样:
var Conditions = new ConditionsCollection({
experimentId: 1
});
我怀疑这会被认为是最佳做法,希望其他人会回答更好的解决方案,但这就是我如何定义我的收藏:
var ConditionsCollection = Backbone.Collection.extend({
model: Condition,
url: function(){
var experimentId = this.at(0).get("experimentId");
return "/api/experiments/" + experimentId + "/conditions";
}
});
答案 7 :(得分:0)
这项工作对我来说(用主干1.2.1测试):
var serverData = Backbone.Collection.extend({
url: function() {
return '//localhost/rest/' + this.dbname;
},
constructor: function(a) {
if(a.dbname){
this.dbname = a.dbname;
}
Backbone.Collection.apply(this, arguments);
}
});
按如下方式使用:
var users = new serverData({dbname : 'users'});