-1

在我的基本集合中,我有基本路径,从基本路径我正在扩展更多 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;

现场演示

4

3 回答 3

1

最简单的解决方案是使用函数 for 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',
    //...

但这很麻烦而且很吵,我不认为节省函数调用的开销是值得的。

于 2013-08-14T06:39:46.587 回答
1
  1. path不是任何 Backbone 类的特殊属性
  2. 模型可以有urlRoot,但集合没有这样的东西

这是一种适合您的方法

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;
于 2013-08-14T06:39:56.090 回答
0

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

console.log(this.path+this.url)
于 2013-08-14T06:32:24.127 回答