我正在寻找一种方法来为我的所有集合提供BaseCollection以实现共享行为。
我能够使用共享函数成功完成它,但我希望在BaseCollection中出现一些初始化逻辑,以便我的所有集合都触发事件'模型更改'。有没有办法让我的BaseCollection有一个构造函数 - 下面的代码是最好的方法吗?我假设如果我放置两个初始化函数或两个构造函数覆盖函数,那么只有一个将被调用。所以我似乎只能使用其中一个。
var BaseCollection = Backbone.Collection.extend({
constructor: function () {
var self = this;
this.on('change',function(model,property){
self.trigger('model-change',model,property);
});
Backbone.Collection.apply(this, arguments);
},
parse: function (resp) {
if (resp.success) {
return resp.success;
}
else if (resp.error) {
return this.models;
}
else {
return resp;
}
},
});
var UsersCollection = BaseCollection.extend({
constructor: function () { //this will override the constructor in BaseCollection, but I want both...
this.givenName = '@UsersCollection';
Backbone.Collection.apply(this, arguments);
},
initialize: function (models, opts) {
//do something here
}
});
有更好的方法吗?我遇到的一个问题是我无法覆盖构造函数两次,我只能在父(BaseCollection)类中覆盖它。那么有一种链式构造函数的方法吗?或者我几乎只有两种选择?
答案 0 :(得分:0)
您可以extend
而不是apply
BaseCollection
和Backbone.Collection
来获取您想要的结果:
var BaseCollection = Backbone.Collection.extend({
constructor: function () {
// your base collection constructor
// run the Backbone.Collection constructor on this
Backbone.Collection.apply(this, arguments);
}
});
// extends methods on BaseCollection
var UserCollection = BaseCollection.extend({
constructor: function () {
// your user collection constructor
// run the BaseCollection constructor on this
BaseCollection.apply(this, arguments);
}
});