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;