【发布时间】:2015-09-29 03:43:20
【问题描述】:
注意:我的问题中的所有事件 pub-sub 都是通过 jQuery 的 on()/trigger()
我的应用程序中有一个模块(称为 Header),它会在某个时间点触发自定义事件('Header:init')。此事件将仅触发一次。
应用程序中的许多其他模块订阅此事件。如果在附加处理程序之前触发了 'Header:init' 事件,我希望这些模块中的事件处理程序能够执行。否则,处理程序按预期执行(一旦 'Header:init' 被触发)。
我希望我清楚我的要求 - 该功能很像 jQuery 的标准“就绪”事件 - 如果 DOM 准备好,处理程序在附加后立即执行,否则在 DOM 准备好后执行。
重申一下,'Header:init' 只触发一次。
我该怎么做?为此,我不希望任何变量在应用程序中浮动。寻找一个干净的解决方案 - 最好是准备事件的工作方式。我检查了 jQuery 站点是否有 jQuery 为此提供的任何事件挂钩,但一切都以浏览器事件为中心,如点击等,而没有自定义事件。
欣赏任何类型的指针。
编辑:明确说明需求...
时间 x : 订阅 Header:init 事件的某些模块具有以下代码,现在正在执行...
$( document ).on( 'Header:init', function() { /* 处理程序 */ ... });
时间 x + 1 :假设 Header 模块现在触发了事件(即稍后的时间点)
$(document).trigger('Header:init');
我的要求是应该仍然执行处理程序。
【问题讨论】:
-
“希望我清楚我需要什么” 不完全;在问题的这一部分:“如果在附加处理程序之前触发了 'Header:init' 事件,是否希望这些模块中的事件处理程序执行”?在附加了哪些处理程序之前?可以在问题中包含
js吗? -
"Time x + 1 :假设 Header 模块现在触发了事件(即稍后的时间点) $( document ).trigger( 'Header:init' ); 我的要求是处理程序仍应被执行。” 处理程序没有被
js尝试过吗?可以创建stacksn-ps来演示吗?
标签: jquery events publish-subscribe