Javascript 如何以及何时使用Approver和Controller?

Javascript 如何以及何时使用Approver和Controller?,javascript,marionette,Javascript,Marionette,我正在努力让我的头脑在木偶应用程序中正确使用控制器。我现在明白了批准者和控制者是齐头并进的 我的应用程序中有一个通用/仪表板样式的视图,它总结了许多不同的数据集。通过在仪表板上选择这些数据集,您可以更详细地查看它们。例如,有一个“任务”列表,允许您选择一个以获取更多详细信息 我认为这种工作方式是通过为从仪表板引出的每个详细视图(如“/tasks/:taskId”)提供各种“路由”。单击一个项目将带您进入其中一个由AppRouter/Controller对管理的路由 然后,您是否会拥有一个管理仪表

我正在努力让我的头脑在木偶应用程序中正确使用控制器。我现在明白了批准者和控制者是齐头并进的

我的应用程序中有一个通用/仪表板样式的视图,它总结了许多不同的数据集。通过在仪表板上选择这些数据集,您可以更详细地查看它们。例如,有一个“任务”列表,允许您选择一个以获取更多详细信息

我认为这种工作方式是通过为从仪表板引出的每个详细视图(如“/tasks/:taskId”)提供各种“路由”。单击一个项目将带您进入其中一个由AppRouter/Controller对管理的路由

然后,您是否会拥有一个管理仪表板的拱形控制器/应用程序样式对象?它将如何为正在汇总的数据绘制各种列表视图

目前,我有一个名为“DashboardController”的控制器,用于实例化它所需的集合和集合视图。进入详细视图时,我要么通过特定记录的代理模型调用api,要么全局传递集合

var DashboardController = Marionette.Controller.extend({
    initialize : function () {
      this._taskData = new TasksCollection();

      // Layout will make a call to 'fetch' on each collection passed in once rendered.
      this.layout = new DashboardLayout({
        tasks : this._taskData
      });
    },

    // This method is mapped to from DashBoardRouter
    main : function () {
      this.layout.render();
    }
});
我在这里的担心和困惑的原因是,我不完全确定如何使用AppRouter/Controller来分离关注点,而在本例中,这些关注点很容易发生冲突。任务集合是否应该位于一个位置,并且是控制器的属性

选择似乎有限:

从其他控制器组成这样的控制器,以便DashboardController为列表视图调用TaskController

完全重新思考控制器代表什么。这很棘手,因为AppRouter似乎是一种教条式的尝试,试图将路由标记化状态绑定到控制器方法


这里有几个问题,但我想最终的问题是,如何从多个数据源显示/合成视图而不交叉关注点?

这可能有点基于观点,但就您所关心的任务集合的所有者而言,为什么不将其设为单例呢?您是否曾经拥有多个TasksCollection类实例?如果没有,那么只需将它的一个实例提供给应用程序的其余部分,通过木偶的模块系统、requirejs、browserify、全局应用程序对象或您选择使用的任何其他依赖关系处理系统即可。我的做法是在应用程序级别使用一个控制器,然后将功能分解成模块,每个模块都有自己的控制器。这样模块就不必相互了解。示例应用程序: