gpt4 book ai didi

javascript - 使用事件在 View 设计模式之间进行通信

转载 作者:搜寻专家 更新时间:2023-11-01 04:32:45 26 4
gpt4 key购买 nike

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

但问题是有时我有未被引用的 View ,所以我使用事件聚合器,它是一个全局通知来了解是否发生了什么……但是当我只想听我无法引用的 subview 时,这似乎不对,类似于 DOM 层次结构中的冒泡事件。

但是让我说我​​有一个像这样的 View 层次结构:

  • 父 View
    • subview
      • subview
        • 模态视图

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

最佳答案

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

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

Backbone.courier uses the DOM to detect parent views但您可以实现自己的 parent 检测方法。

因此,无需事件聚合或 DOM 也是可行的,但我认为您最终将创建和管理自己的层次结构。 因为我们已经有了 DOM,所以这很奇怪。这肯定会让我产生疑问:“我真的需要冒泡这个事件吗?”。

对于您的示例,最简单的解决方案可能是为您的 ModalView 提供对 ParentView 的引用,然后简单地调用 parentView.listener() 当你的 even 在 ModalView 上被触发时。你真的需要它通过 children 冒泡吗?这真的需要解耦吗?当您假设没有对您的其他 View 的引用时,可能是您过于严格了。

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

modalView.container = parentView;

modalView.myEventHandler = function(e) {
this.container.myEventHandler(e);
}

关于javascript - 使用事件在 View 设计模式之间进行通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15177441/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com