如何在 Controller 中捕获 Subview 事件?
How to catch Subview events in the Controller?
使用 RequireJS 模块构建的 BackboneJS 应用程序。
一个 View 有多个 subView 实例。 subView 中的点击事件应该 运行 Controller 方法。
初始化顺序需要 View 模块在 Controller,所以需要 Controller 模块在 subView 会产生循环依赖。
我更愿意创建事件来将数据传送给控制器。考虑了两个选项:
- View 监听 subView 事件并触发自己的 Events,listened by
控制器;
- 有第三个app-global对象,subViews触发器
该对象上的事件,控制器侦听该对象?
这里最好的模式是什么?
如果只有一种情况,选项1正确。
但如果是普通操作,有多个事件,需要很多视图:2 选项可能更好。
Marionette 有 event bubbling 到位。例如,如果视图触发 "some:event",您可以在集合视图上将其收听为 "childview:some:event"。
如果你有非常深的视图结构,那么 "childview:...childview:some:event" 开始看起来很糟糕然后你可能会考虑三个选项:手动冒泡它们,使用像 "backbone.radio" 这样的全局消息总线或传递一些在其上触发事件的实体。
我个人对全局总线感觉不好,更喜欢为应用程序的每个有意义的部分提供一些可以实现 mediator/observer 模式的东西。基本实现可能是状态模型,在控制器(或路由器)中创建并传入下面的所有视图 - 然后它们中的任何一个都可以改变状态或监听变化。
实际上,由于控制器在 Marionette 3 中已被弃用,因此将所有控制器逻辑移动到这些状态模型中可能是个好主意。不幸的是,Backbone 社区正在衰落,我找不到关于该主题的任何好的资源。
使用 RequireJS 模块构建的 BackboneJS 应用程序。
一个 View 有多个 subView 实例。 subView 中的点击事件应该 运行 Controller 方法。
初始化顺序需要 View 模块在 Controller,所以需要 Controller 模块在 subView 会产生循环依赖。
我更愿意创建事件来将数据传送给控制器。考虑了两个选项:
- View 监听 subView 事件并触发自己的 Events,listened by 控制器;
- 有第三个app-global对象,subViews触发器 该对象上的事件,控制器侦听该对象?
这里最好的模式是什么?
如果只有一种情况,选项1正确。
但如果是普通操作,有多个事件,需要很多视图:2 选项可能更好。
Marionette 有 event bubbling 到位。例如,如果视图触发 "some:event",您可以在集合视图上将其收听为 "childview:some:event"。
如果你有非常深的视图结构,那么 "childview:...childview:some:event" 开始看起来很糟糕然后你可能会考虑三个选项:手动冒泡它们,使用像 "backbone.radio" 这样的全局消息总线或传递一些在其上触发事件的实体。
我个人对全局总线感觉不好,更喜欢为应用程序的每个有意义的部分提供一些可以实现 mediator/observer 模式的东西。基本实现可能是状态模型,在控制器(或路由器)中创建并传入下面的所有视图 - 然后它们中的任何一个都可以改变状态或监听变化。
实际上,由于控制器在 Marionette 3 中已被弃用,因此将所有控制器逻辑移动到这些状态模型中可能是个好主意。不幸的是,Backbone 社区正在衰落,我找不到关于该主题的任何好的资源。