backbone集合url不带参数
backbone collection url does not take parameters
我有一个 Backbone Collection
class,url
属性 设置为一个方法。
url
由 3 个 "elements" 组成,我将其称为 baseUrl
、username
和 path
- 所以它看起来像 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;
我有一个 Backbone Collection
class,url
属性 设置为一个方法。
url
由 3 个 "elements" 组成,我将其称为 baseUrl
、username
和 path
- 所以它看起来像 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;