我正在尝试编写一个针对对象浏览器的Backbone视图,该浏览器旨在在不同的对象类型和略有不同的操作中实现。
我尝试了简单地扩展我的浏览器中的Backbone视图,然后在我的实现中扩展浏览器,但这会使一些属性被共享。这是一个不希望看到的效果,因为数据会随着每次浏览器创建而附加到所有实现中。
有人能够解决这个问题或提供替代方案吗?
以下是一些代码示例,以便更好地了解当前的情况:
我尝试了简单地扩展我的浏览器中的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({
});
编辑 我的问题是子类共享了collections属性。以下是我自己的解决方案,通过继承的方法初始化collections属性。jsfiddle.net/JhZXh/3