用于嵌套视图的Marionette多个控制器

时间:2014-01-23 07:33:36

标签: backbone.js marionette

我想知道如何在Marionette中构建嵌套控制器,我有这个层次结构

Menu (module)
  MenuController
    MenuItemCollectionView
        MenuItemView
            MenuItemDropdownController
                MenuItemDropdownLayout
                    MenuItemDropdownSidebarView
                    MenuItemDropdownContentView

基本上我正在构建类似于polygon.com的导航菜单(当您将鼠标悬停在项目上时会出现“下拉列表”)。

我在Marionette的“嵌套控制器”的一些例子后看了很多但是没有运气,我的理解是我需要为每个Dropdown分离出一个Controller,并且可能是每个MenuItemView的控制器。我看到类似的例子的方式是“高级控制器”负责一切。也许我对Marionette中的控制器的理解是错误的,并且它们更倾向于路由目的。

如果您有MenuItemView负责创建MenuItemDropdownController,你们将如何构建这个? (我觉得abit很奇怪。)

或者也许我正在考虑这个错误的方式也许这应该分成多个模块?但我真的不能把它包裹在脑海中,因为我将模块看作单个项目,如“菜单”/“登录表单”等,而不是集合视图中的项目。

2 个答案:

答案 0 :(得分:1)

你应该有一个控制器来处理你的菜单。

这种情况应该可以使用复合视图进行管理,我在这里写了一篇类似目标的博文:http://davidsulc.com/blog/2013/02/03/tutorial-nested-views-using-backbone-marionettes-compositeview/

您可以使用Marionette布局处理各种子视图的复杂性。

您可以在此处查看处理布局的控制器示例(请参阅contactsListLayout):https://github.com/davidsulc/marionette-gentle-introduction/blob/master/assets/js/apps/contacts/list/list_controller.js#L43

基本上,布局是“包含自己区域中的子视图的视图”。

在构建上述应用程序的书籍中可以更详细地解释处理嵌套布局(可用here)。

答案 1 :(得分:0)

无论是主干还是木偶都没有强烈意见如何在路由之外使用控制器。

在实践中,控制器和路由用于将应用程序置于特定状态,在您的示例中,我认为您过度使用控制器。在您的情况下,单个控制器应足以处理您的菜单。