Backbone.js - 基本路径不与子路径连接

时间:2013-08-14 06:28:37

标签: backbone.js backbone-collections

在我的基本集合中,我有基本路径,从基本路径我进一步扩展网址..但是当我在扩展集合中控制网址时,我没有得到网址的完整路径..

而只是我正在获取网址 - 扩展集合有什么..为什么我会这样,以及应该采取哪些正确的方法?

这是我的尝试:

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;

live demo

3 个答案:

答案 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)

  1. path不是任何Backbone类的特殊属性
  2. 模型可以有urlRoot,但收藏品没有这样的东西
  3. 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)