5

当您有一个引用另一个视图并监听其事件的视图时,事件处理程序很好,这对于解耦和可重用性来说非常完美。在视图设计模式与事件之间进行通信

问题虽然有时我有意见,没有引用,所以我使用事件聚合器,这是一个全球通知,知道是否发生了什么事情......但这似乎不正确,当我只是想听我说的儿童意见,引用,像DOM层次结构中的冒泡事件。

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

  • ParentView
    • ChildView
      • ChildView
        • ModalView

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

回答

2

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

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

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

所以这是可行的,没有事件聚合或DOM,但我想你最终会创建和管理自己的层次结构。 由于我们已经有了DOM,所以闻起来很有味道。这肯定会让我质疑:“我真的需要泡这个事件吗?”。

对于你的榜样,最简单的解决办法是给你的ModalViewParentView参考,只需调用parentView.listener()当你即使是在ModalView解雇。你真的需要它通过孩子泡吗?这是否真的需要分离?当你认为你没有提及你的其他观点时,你可能会被限制太多。

这些都是我反问自己的问题。尽管它可能看起来很明显这可能是最好的解决办法:

modalView.container = parentView; 

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

感谢的人,我想你是对的..在我的情况下,最好的解决办法可能存在一个ModalView和参考主叫/演示这是有道理的.. 。当ModalView完成并触发主持人被调用的时候,哪个是最深的ChildView并且它触发了通知父视图的触发器 – mateusmaso 2013-03-03 17:08:26

相关问题