我需要Web应用程序中的组件间通信,并且正在考虑采用不同的方法来实现此目的。我有一些想法,但会欢迎其他想法。javascript中的组件间通信
首先,一个快速简单的例子。我在页面上有两个单独的组件,这些组件是异步加载的。通过组件,我的意思是一个HTML块,它有一个JavaScript对象与它关联,其中包括基于jQuery的行为在HTML节点上。当用户与一个组件进行交互时,应该在另一个组件中进行更改,反之亦然。
这里要记住的关键是每个组件应该是一个独立的单元。它可以在应用程序的不同部分,甚至不同的应用程序中重复使用。所以它不知道页面上其他组件的存在。
我对解决方案的当前想法包括让组件监听他们感兴趣的自定义事件,并在发生操作时发送自定义事件。因此,每个组件都会侦听由另一个组件触发的事件。
问题是,由于异步加载,一个组件可能需要更长的时间才能加载。有可能一个事件发送得太快而丢失。在某些情况下,这可能会很好,但在某些情况下,我需要确保组件发送的所有事件都被消耗。
所以这里的一些相关问题:
被触发后发生的事件是什么?如果在触发时没有听众,它会消失吗?
有没有一种方法可以检测到触发的偶数是否被消耗或丢失?
什么是一些很好的方法,让每个组件去了解其他组件?
是否有任何现有的开源JavaScript项目或jQuery插件处理这些类型的东西?
在关于问题3,我在想,每一个组件可以发出某种寄存器事件,包括事件类型,它听来,它已注册的组件列表用。组件会监听这些注册事件。某些使用定时器的注册逻辑将用于确保在组件加载过程中正确的组件注册在一起。一旦注册完成,组件将能够发送正常事件。
这是一个好主意。消息总线可以位于应用程序级别,并可在页面加载时启动。然后组件只发送事件,总线捕捉它们,并将它们推送给适当的订户,或者保存到它们中,直到订户注册。如果事件的生存时间到期,它甚至可能会通知原始发送组件该事件失败。 – Tauren 2010-08-06 20:06:54