我正在设计一个通用对象浏览器插件,其功能类似于OS X的列视图中的Finder。我已经将界面划分为几个嵌套视图,浏览器,列和对象。
我将在几个场景中使用此插件,其中浏览器视图,对象视图和列视图可能需要或可能不需要自定义。有时,对象将是文件和文件夹。
This is OS X's Finder in column view in case you don't know what it looks like.
目前我正在使用RequireJS来传递依赖项,但是为了简单地继承和扩展ObjectView,我必须替换整个堆栈。
是否有更好的结构可以扩展插件但只是部分?
我可以使用另一个像Browser这样的对象,将三个视图存储在一些名称空间中,它们可以互相使用,如Backbone吗?
RequireJS会是什么样子?
BrowserView.js
var BrowserView = Backbone.View.extend({
open: function () {
var collectionView = new CollectionView( {collection: objects} );
}
});
CollectionView.js
var CollectionView = Backbone.View.extend({
render: function () {
this.collection.each( function (object) {
var objectView = new ObjectView( {model: objects} );
objectView.bind('click', this.select, this);
this.container.append( objectView.el );
objectView.render();
this.objectViews.push(objectView);
}, this );
},
});
ObjectView.js
var ObjectView = Backbone.View.extend({
});
三江源 XX
答案 0 :(得分:2)
我会将这些视图放在同一个模块中。
模块的目的 - 无论您使用的是RequireJS还是普通的旧JavaScript模块 - 都是为了特定目的而封装一组相关的对象和函数。在这种情况下,您的目的是Finder视图。
通过将所有相关对象保存在同一个文件中,您可以更自由,更灵活地使对象协同工作。
作为旁注,但与你正在做的事情有关,你或许可以从我的Backbone.Marionette插件的“CompositeView”中获得一些如何使这项工作的想法。我以前用它构建了文件夹和文件的分层树视图,Finder的列视图也很容易用它构建。
请注意,我并不是说你需要使用我的插件。相反,我认为它可能有助于弄清楚如何构建代码。
我有一篇博文在此处讨论:http://lostechies.com/derickbailey/2012/04/05/composite-views-tree-structures-tables-and-more/
您可以在此处找到代码和文档:https://github.com/derickbailey/backbone.marionette
复合视图的带注释的源代码位于:http://derickbailey.github.com/backbone.marionette/docs/backbone.marionette.html#section-26