我正在设计一个通用的对象浏览器插件,它的功能类似于OS X的Finder的列视图。我已经将界面分为几个嵌套的视图,浏览器,列和对象。
我将在几个场景中使用这个插件,其中浏览器视图,对象视图和列视图可能需要或可能不需要自定义。有时对象将是文件和文件夹,例如。
This is OS X's Finder in column view in case you don't know what it looks like.
目前我正在使用RequireJS来传递依赖项,但是为了简单地继承和扩展ObjectView,我必须替换整个堆栈。
有没有更好的结构,插件可以扩展,但只有一部分?
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({
});
1条答案
按热度按时间pw9qyyiw1#
我会将这些视图放在同一个模块中。
模块的目的--无论你使用的是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