在我的基本集合中,我有基本路径,从基本路径我进一步扩展网址..但是当我在扩展集合中控制网址时,我没有得到网址的完整路径..
而只是我正在获取网址 - 扩展集合有什么..为什么我会这样,以及应该采取哪些正确的方法?
这是我的尝试:
BaseCollection = Backbone.Collection.extend({
path: 'http://path/to/api'
});
TeachersCollection = BaseCollection.extend({
url:"xyz/abc",
initialize:function(){
console.log(this.url);//xyz/abc - why i am getting like this instead of full path?
//full url should be 'http://path/to/api/xyz/abc' - how can i get like this..?
}
});
var x = new TeachersCollection;
答案 0 :(得分:1)
最简单的解决方案是使用url
的函数,然后你可以这样做:
TeachersCollection = BaseCollection.extend({
url: function() {
return this.path + '/xyz/abc';
},
//...
在这种情况下尝试仅为url
使用字符串的问题是获得正确的this
,以便您可以查找path
。您可以浏览BaseCollection.prototype
:
TeachersCollection = BaseCollection.extend({
url: BaseCollection.prototype.path + '/xyz/abc',
//...
但是这很麻烦且很吵,我不认为节省函数调用的开销值得麻烦。
答案 1 :(得分:1)
path
不是任何Backbone类的特殊属性urlRoot
,但收藏品没有这样的东西Here's an approach that should work for you:
TeachersCollection = BaseCollection.extend({
url:function() {
return this.path + "/xyz/abc"
},
initialize:function(){
// this.url = _.result(this, 'url');
console.log(_.result(this, 'url'));
}
});
如果您要对其进行大量扩展,您可能实际上想要考虑更改基本集合上的构造函数like this:
BaseCollection = Backbone.Collection.extend({
constructor: function() {
this.url = 'http://path/to/api' + this.url;
Backbone.Collection.prototype.constructor.apply(this, arguments);
}
});
TeachersCollection = BaseCollection.extend({
url: "/xyz/abc",
initialize:function(){
console.log(this.url);//xyz/abc
//full url should be 'http://path/to/api/xyz/abc'
}
});
var x = new TeachersCollection;
答案 2 :(得分:0)
也许你可以写下这段代码:
console.log(this.path+this.url)