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