【发布时间】:2012-02-23 01:24:02
【问题描述】:
我正在尝试为对象浏览器编写 Backbone 视图,该视图旨在在具有不同对象类型和略有不同操作的多个地方实现。
我尝试过简单地在浏览器中扩展主干视图,然后在我的实现中扩展浏览器,但这给我留下了一些共享的属性。这是一个不受欢迎的效果,因为每次创建浏览器时都会将数据附加到所有实现中。
有人可以阐明解决此问题的方法或替代解决方案吗?
以下是一些代码示例,可让您更好地了解当前的情况:
var BrowserView = Backbone.View;
_.extend(BrowserView.prototype, Backbone.View.prototype, {
className: 'browser',
collections: [],
events: {
},
_events:{
},
initialize: function () {
this._initialize();
},
render: function () {
this._render();
},
_initialize: function () {
this.container = $( this.make('div', {class: 'container'} ) );
this.$el.append(this.container);
if ( this.options.collections ) {
this.collections = [];
_.each(this.options.collections, this.add, this);
}
_.extend(this.events, this._events);
this.delegateEvents();
},
_render: function () {
this.container.empty();
_.each(this.collections, function (view) {
this.container.append(view.el);
view.render();
}, this);
}
});
BrowserView.extend = Backbone.View.extend;
var ContactBrowserView = BrowserView.extend({
});
编辑 我的问题是子类共享集合属性。这是我自己的解决方案的一个示例,它通过继承的方法初始化集合属性。 jsfiddle.net/JhZXh/3
【问题讨论】:
标签: javascript class view backbone.js prototype