Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 主干集合url不接受参数_Javascript_Backbone.js - Fatal编程技术网

Javascript 主干集合url不接受参数

Javascript 主干集合url不接受参数,javascript,backbone.js,Javascript,Backbone.js,我有一个主干集合类,其url属性设置为方法 url由3个“元素”组成,我称之为baseUrl、username和path——因此它看起来像baseUrl/username/path 我对我正在处理的spa中的几个用户使用相同的实例。但是,我希望能够更改的一个元素(实例化后)是用户名。我需要这个有两个原因 1-我在实例化时没有username属性 第二个-用户名根据用户的不同而变化,我不想为每个新用户创建集合的新实例 所以我的问题是为什么url方法在实例化集合之后不使用参数,这样我就可以执行类似m

我有一个
主干集合
类,其
url
属性设置为方法

url
由3个“元素”组成,我称之为
baseUrl
username
path
——因此它看起来像
baseUrl/username/path

我对我正在处理的spa中的几个用户使用相同的实例。但是,我希望能够更改的一个元素(实例化后)是用户名。我需要这个有两个原因

1-我在实例化时没有username属性

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

所以我的问题是为什么
url
方法在实例化集合之后不使用参数,这样我就可以执行类似
myCollection.url({username:“Mac”})

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

Backbone使用集合作为上下文调用该方法,因此您可以使用
this
访问集合实例的成员变量

var MyCollection = Backbone.Collection.extend({
    url: function() {
        return "base-url/" + this.username + "/path";
    },
});
要在实例化后使用此选项,可以手动设置集合的
用户名
字段,也可以覆盖集合的方法

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的其他信息

我是主干网的狂热用户,这一点非常重要,因为主干网的许多功能都没有文档记录,而且源代码很小,很容易通过

如果选中该方法,则应看到该行:

params.url = _.result(model, 'url') || urlError();
如果检查下划线的函数,可以看到它调用函数(作为字符串传递),如下所示:

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