Backbone.js-基本路径不包含子路径

Backbone.js-基本路径不包含子路径,backbone.js,backbone.js-collections,Backbone.js,Backbone.js Collections,在我的基本集合中,我有基本路径,从基本路径我扩展了更多的URL。。但是,当我在扩展集合中控制台url时,我没有得到url的完整路径 取而代之的是我得到的url——扩展集合所拥有的。。为什么我会这样,正确的方法应该是什么 以下是我的尝试: BaseCollection = Backbone.Collection.extend({ path: 'http://path/to/api' }); TeachersCollection = BaseCollection.extend({

在我的基本集合中,我有基本路径,从基本路径我扩展了更多的URL。。但是,当我在扩展集合中控制台url时,我没有得到url的完整路径

取而代之的是我得到的url——扩展集合所拥有的。。为什么我会这样,正确的方法应该是什么

以下是我的尝试:

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;

也许您可以编写以下代码:

console.log(this.path+this.url)

最简单的解决方案是使用函数,然后可以执行以下操作:

TeachersCollection = BaseCollection.extend({
    url: function() {
        return this.path + '/xyz/abc';
    },
    //...
在这种情况下,尝试仅为url使用字符串的问题是获取正确的url,以便可以查找路径。您可以浏览BaseCollection.prototype:

但这相当麻烦和嘈杂,我不认为节省函数调用的开销值得这么麻烦

路径不是任何主干类的特殊属性 模型可以有urlRoot,但是对于集合没有这样的功能 :

如果要对基本集合进行大量扩展,您实际上可能需要考虑更改其构造函数:

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;

我可以这样写,但是当我获取数据时,它应该从完整路径获取,对吗。。?这不仅仅是安慰,我需要使用我的基本urlYes获取数据。我认为这是一个外部api,所以你可以使用它-
TeachersCollection = BaseCollection.extend({
    url:function() {
        return this.path + "/xyz/abc"
    },
    initialize:function(){
        // this.url = _.result(this, 'url');
        console.log(_.result(this, 'url'));
    }
});
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;