如何确定我是否应该使用布局视图Marionette?

时间:2014-05-03 21:57:35

标签: backbone.js marionette

我浏览了布局视图中的所有牵线木偶文章,我不确定使用它与使用我的应用程序设置有什么好处,让我告诉你。

在将组件构建到我的应用程序之后,我创建了一个应用程序级视图,用于处理所有这些视图的初始化和重新发送。

var Backbone   = require('backbone'),
    TeamsView  = require('./teams'),
    DataView   = require('./teamData'),
    LeaderView = require('./leader');

module.exports = appView = Backbone.View.extend({
    el: '#wrap',
    template: require('../../templates/app.hbs'),
    initialize: function() {
        window.App.views.teamsView = new TeamsView({ collection: window.App.data.teams });
        window.App.views.dataView  = new DataView({  collection: window.App.data.teams });
        window.App.views.leaderView = new LeaderView({  collection: window.App.data.teams });
    },
    render: function() {
        var teamsView  = window.App.views.teamsView;
        var dataView   = window.App.views.dataView;
        var leaderView = window.App.views.leaderView;
        this.$el.find('#basketball .app').prepend(teamsView.render().el);
        this.$el.find('#basketball .app').prepend(dataView.render().el);
        this.$el.prepend(leaderView.render().el);
    }
});

然后在控制器内部我渲染上面的应用程序视图。

这对我来说很舒服,但是内心深处说错了,我应该看布局视图?

所以我的问题更具体地说,当我将主题应用程序中的各个部分放在一起时,我应该查看布局视图还是创建单个应用程序级别视图(如上所述)?

1 个答案:

答案 0 :(得分:2)

你所做的事情在最简单的层面上是好的,尽管可能比它需要更多的手动。但是,您可能需要布局视图,因为事情会变得更复杂。

如果您的应用中有一个区域,您希望包含子区域,但仅在某些视图中,则会显示布局视图的值。例如,您的应用#mainRegion内部可能有一个索引/列表,其中只有一堆团队,在这种情况下,您可以使用CollectionView(或CompositeView如果您愿意为每个团队添加一些样式)和ItemView

但是,如果您点击编辑其中一个小组,现在您希望#mainRegion显示编辑页面,该页面本身包含#infoRegion中有关该小组的一些信息,然后是编辑表单在#formRegion中。这些是特定于编辑页面的区域,因此您需要使用布局视图来管理它们,而不是一直委托给应用程序级别。

我希望这是有道理的,如果需要,我很乐意澄清。您还可以查看文档,了解何时使用每种视图类型的细分:https://github.com/marionettejs/backbone.marionette/wiki/Use-cases-for-the-different-views