我正在为Backbone对象构建中间类:
例如,我有App.Router
继承自Backbone.Router
,我的所有馆藏都将继承App.Router
而不是Backbone。
我不确定最佳做法是什么/或者它是否能正常工作。
我不确定如何结束构造函数,在Backbone的核心库中,它直接调用父(在继承中),而我用__super__
调用父原型。
我还扩展了一个基础对象来启用泛型方法。
这看起来好吗?
App.Router = Backbone.Router.extend({
// Reference to views objects instanciated
views: {},
// Reference to collections objects instanciated
collections: {},
// Class constructor (can be overriden in subclass with the need of a parent call)
constructor: function(options) {
console.log(" \u2192App.Router::constructor()", [this, arguments]);
var self = this;
// Configure instance
this._configure(options || {});
// Extend App.Object
_.extend(this, App.Object);
// SO? : Is this the correct way to end constructor?
return App.Router.__super__.constructor.apply(this, arguments);
},
// Class initialization (override in subclass without the need of a parent call)
initialize: function(config) {
d&&console.log(this.name + "::initialize()", [this, arguments]);
},
// Performs the initial configuration of a Router with a set of options.
// Keys with special meaning are attached directly to the class
_configure : function(options) {
if (this.options) options = _.extend({}, this.options, options);
var classOptions = ['registerKey', 'parent', 'collections', 'views'];
for (var i = 0, l = classOptions.length; i < l; i++) {
var attr = classOptions[i];
if (options[attr]) this[attr] = options[attr];
}
this.options = options;
},
// Render a view with a collection & optional data
render: function(className, options) {
},
});
答案 0 :(得分:1)
我不会改变构造函数。您可以直接在initialize方法中完成所有这些操作。
所以:
App.Router = Backbone.Router.extend({
initialize: function(options){
this._configure(options)
// no need to call super initialize as it is empty
},
_configure: function(){...}
});
_.extend(App.Router.prototype, App.Object);
这将是更清洁的IMO。