backbone集合url不带参数

backbone collection url does not take parameters

我有一个 Backbone Collection class,url 属性 设置为一个方法。

url 由 3 个 "elements" 组成,我将其称为 baseUrlusernamepath - 所以它看起来像 baseUrl/username/path

我在我工作的水疗中心为多个用户使用同一个实例。但是,我希望能够更改(实例化后)的一个元素是用户名。我需要这个有两个原因。

1st - 我在实例化时没有用户名 属性。

第二 - 用户名根据用户而变化,我不想为每个新用户创建集合的新实例。

所以我的问题是为什么 url 方法在实例化集合后不接受参数,以便我可以做类似 myCollection.url({username: "Mac"})?

的事情

另外,为什么 Backbone 不允许将参数传递给 url 方法?

Backbone 以集合为上下文调用 url 方法,因此您可以使用 this.

访问集合实例的成员变量
var MyCollection = Backbone.Collection.extend({
    url: function() {
        return "base-url/" + this.username + "/path";
    },
});

要在实例化后使用它,您可以手动设置集合的 username 字段,或者覆盖集合的 sync 方法。

var MyCollection = Backbone.Collection.extend({
    url: function() {
        return "base-url/" + this.username + "/path";
    },

    sync: function(method, model, options) {
        options = options || {};
        if (options.username) this.username = options.username;

        // call the default sync
        return Backbone.collection.prototype.sync.call(this, method, model, options);
    }
});

并使用它:

myCollection.fetch({ username: "Mac" });

有关如何知道如何调用 url 的其他信息

我是 Backbone 的 annotated source 的狂热用户,这真的很重要,因为 Backbone 的很多功能都没有记录,而且来源很小而且很容易通过。

如果您检查 sync 方法,您应该看到该行:

params.url = _.result(model, 'url') || urlError();

如果你检查下划线的 result 函数,你可以看到它调用函数(作为字符串传递)是这样的:

return _.isFunction(value) ? value.call(object) : value;