Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用事件在视图和设计模式之间进行通信_Javascript_Design Patterns_Backbone.js_Eventaggregator_Event Driven Design - Fatal编程技术网

Javascript 使用事件在视图和设计模式之间进行通信

Javascript 使用事件在视图和设计模式之间进行通信,javascript,design-patterns,backbone.js,eventaggregator,event-driven-design,Javascript,Design Patterns,Backbone.js,Eventaggregator,Event Driven Design,当您有一个引用另一个视图并侦听其事件的视图时,事件处理程序就可以了,这非常适合于解耦和重用 但问题是,有时我的视图没有被引用,所以我使用事件聚合器,它是一个全局通知,以了解是否发生了什么。。。但是,当我只想听听我不能引用的子视图时,这似乎是不对的,比如DOM层次结构中的冒泡事件 但我要说的是,我有一个视图层次结构,如: ParentView 儿童视图 儿童视图 ModalView 我想在父视图中知道ModalView何时触发事件。。。我不能使用事件冒泡,因为ModalView不在

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

但问题是,有时我的视图没有被引用,所以我使用事件聚合器,它是一个全局通知,以了解是否发生了什么。。。但是,当我只想听听我不能引用的子视图时,这似乎是不对的,比如DOM层次结构中的冒泡事件

但我要说的是,我有一个视图层次结构,如:

  • ParentView
    • 儿童视图
      • 儿童视图
        • ModalView

我想在父视图中知道ModalView何时触发事件。。。我不能使用事件冒泡,因为ModalView不在同一DOM层次结构中,所以我应该在本例中使用事件Agregator还是其他什么?我真的希望事件气泡可以适合我的情况。

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

您可以看看如何实现自己的事件冒泡系统

但是您可以实现自己的父检测方法

因此,在没有事件聚合或DOM的情况下,这是可行的,但我认为您最终将创建和管理自己的层次结构既然我们已经有了DOM,这就有味道了。这肯定会让我产生疑问:“我真的需要把这个事件泡起来吗?”

对于您的示例,最简单的解决方案可能是为您的ModalView提供一个对ParentView的引用,并在对ModalView启动时调用
ParentView.listener()
。你真的需要它在孩子们中间冒泡吗?这真的需要解耦吗?这可能是因为当你假设你没有对其他视图的引用时,你限制太多了

不管怎样,这些都是我要问自己的问题。尽管这看起来很明显,但它可能是最好的解决方案:

modalView.container = parentView;

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

谢谢你,我想你是对的。。在我的情况下,最好的解决方案可能是提供一个ModalView并引用调用方/演示方,这很有意义。。。当ModalView完成并触发时,将调用presenter,这是最深的子视图,并触发气泡以通知父视图