2

我有具有许多嵌套视图(木偶布局和区域)的复杂主干应用程序,并且我已经使用木偶事件管理器在这些视图之间进行协调。但是在编写代码的一半时,我意识到我正在创建太多事件并且更复杂的是,我很少有事件触发多个动作。

其他复杂的主干应用程序如何管理事件。在处理事件时要记住的任何准则、最佳实践等,然后再将自己挖入更大的漏洞。

谢谢

4

1 回答 1

2

我不确定您使用的是哪个事件框架,因此无需任何假设,请确保您使用的是 Marionette 的EventBinder,它可在所有 Marionette 视图中直接使用,以及可选的EventAggregator用于跨越太多边界的应用程序级事件并用于解耦模块。

我不是该主题的专家,因此以下内容无论如何都不是权威:

  • 如果父视图需要在同一个模块的子视图中触发动作,那么直接使用方法调用而不是事件机制。
  • 如果子视图需要在父视图中触发动作,则使用EventBinder如下:

在父视图中:

this.bindTo(subview, 'myscope:myevent', this.myevetHandler);

在子视图中:

this.trigger('myscope:myevent');
  • 对于跨模块或跨视图事件传播,基本上是应用程序范围的事件,请使用应用程序的 EventAggregator

    MyApp = new Backbone.Marionette.Application();
    
    MyApp.vent.on("foo", function(){
      alert("bar");
    });
    
    MyApp.vent.trigger("foo"); // => alert box "bar"
    
  • 对于不应依赖于特定应用程序对象的可重用模块,您可以使用自定义EventBinderEventAggregator.

有关更长的讨论,请参阅:

于 2012-09-22T20:25:37.850 回答