5

当您有一个引用另一个视图并侦听其事件的视图时,事件处理程序很好,这非常适合解耦和可重用性。

但问题是有时我有未引用的视图,所以我使用事件聚合器,它是一个全局通知来了解是否发生了某些事情......但是当我只想听我无法引用的孩子的观点时,这似乎不对,比如DOM 层次结构中的冒泡事件。

但让我说我有一个视图层次结构,如:

  • 父视图
    • 子视图
      • 子视图
        • 模态视图

我想知道当 ModalView 触发事件时在ParentView中...我不能使用事件冒泡,因为ModalView不在同一个 DOM 层次结构中,所以在这种情况下我应该使用 Event Agregator 还是其他什么?我真的希望那个事件泡沫适合我的情况。

4

1 回答 1

2

如果您不能使用 DOM 的层次结构并且不想使用事件聚合器,我的第一直觉是您需要在视图中构建自己的层次结构。

您可以查看backbone.courier,了解如何实现自己的事件冒泡系统。

Backbone.courier 使用 DOM 来检测父视图,但您可以实现自己的方法来检测父视图。

所以它在没有事件聚合或 DOM 的情况下是可行的,但我认为你最终会创建和管理自己的层次结构。因为我们已经有了 DOM,所以这很臭。这肯定会让我产生疑问:“我真的需要冒泡这个事件吗?”。

对于您的示例,最简单的解决方案可能是为您的ModalView 提供对ParentView的引用,并在您的偶数在 ModalView 上触发时简单调用。你真的需要它在孩子们中间冒泡吗?这真的需要解耦吗?当您假设您没有参考其他观点时,您可能过于严格。parentView.listener()

无论如何,这些都是我会问自己的问题。虽然看起来很明显,但它可能是最好的解决方案:

modalView.container = parentView;

modalView.myEventHandler = function(e) {
    this.container.myEventHandler(e);
}
于 2013-03-03T01:20:23.983 回答