使用RequireJS模块构建的BackboneJS应用程序。
View 有多个 subView 实例。 subView 中的点击事件应该运行 Controller 方法。
初始化顺序需要 Controller 中的 View 模块,因此 subView 中需要 Controller 模块会创建循环依赖项
我更愿意创建事件来向Controller传达数据。考虑了两个选择:
这里最好的模式是什么?
答案 0 :(得分:1)
如果只有一种情况,则选项1是正确的 但是,如果是一个常见的操作,有多个事件和许多视图的需要:2选项可能更好。
答案 1 :(得分:1)
Marionette已event bubbling到位。例如,如果视图触发“some:event”,您可以在集合视图上将其作为“childview:some:event”进行监听。
如果你有非常深的视图结构,那么“childview:... childview:some:event”开始看起来很糟糕然后你可能会考虑三个选项:手动冒泡它们,使用像“backbone.radio”这样的全局消息总线“或者传递一些实体在其上发射事件。
我个人对全球总线感到不满,并希望为应用程序的每个有意义的部分提供一些能够实现mediator / observer模式的东西。基本实现可能是状态模型,在控制器(或路由器)中创建并传递到下面的所有视图中 - 然后它们中的任何一个都可以更改状态或听取更改。
实际上由于控制器在Marionette 3中被弃用,所以将所有控制器逻辑移到这些状态模型中可能是个好主意。不幸的是,由于Backbone社区正在衰落,我找不到任何有关该主题的好资源。