我想为一个对象浏览器编写一个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属性。 jsfiddle.net/JhZXh/3
嗨桑德,对不起我的问题是,没有足够的描述。我还创建了JS-Fiddle以更好地展示我的问题的核心。也许我应该从一开始就这样做。我的问题是,子类共享集合属性。 http://jsfiddle.net/JhZXh/3/ – 2012-02-23 02:11:27
在任何情况下,只需将jsfiddle和描述添加到原始文章中,并不是每个人都可以在评论中找到它。我会看看它,看看我能不能找到一个更合适的答案。 – Sander 2012-02-23 07:09:01