使用RequireJS模块构建的BackboneJS应用程序。如何捕捉控制器中的子视图事件?
A 查看有多个实例子视图。点击事件子视图应运行控制器方法。
初始化顺序需要视图模块中控制器,所以需要控制器模块中子视图将创建一个循环依赖关系。
我宁愿创建事件来传递数据给控制器。考虑两种选择:
- 查看侦听subView事件并触发自己的事件,由 监听;
- 有第三个应用程序全局对象,subViews在该对象上触发 事件,Controller在该对象上侦听?
这里最好的模式是什么?
使用RequireJS模块构建的BackboneJS应用程序。如何捕捉控制器中的子视图事件?
A 查看有多个实例子视图。点击事件子视图应运行控制器方法。
初始化顺序需要视图模块中控制器,所以需要控制器模块中子视图将创建一个循环依赖关系。
我宁愿创建事件来传递数据给控制器。考虑两种选择:
这里最好的模式是什么?
木偶具有event bubbling到位。例如,如果视图触发“some:event”,则可以在集合视图上将其作为“childview:some:event”来听。如果你有非常深的视图结构,那么“childview:... childview:some:event”开始看起来非常糟糕,然后你可能会考虑三个选择:手动将它们展开,使用像“主干”这样的全局消息总线。无线电“或传递一些实体来触发事件。
我个人对全球巴士感觉不好,并且倾向于为每个有意义的应用部分设计一些实现mediator/observer模式的东西。基本的实现可能是状态模型,在控制器(或路由器)中创建,并在下面的所有视图中传递 - 然后它们中的任何一个都可以改变状态或听取更改。
实际上,作为控制器在Marionette 3中已被弃用,在这些状态模型中移动所有控制器逻辑可能是一个好主意。不幸的是,随着Backbone社区的衰落,我无法找到关于该主题的任何好资源。
如果只有一种情况,选项1是正确的。
但是,如果是一个常见的操作,多个事件和许多视图需要帮助:2选项可能会更好。