我已经阅读StackOverflow多年了,但我终于遇到了一个问题,我需要帮助,因为我无法找到合适的答案。
现状: 我有一个自定义JS组件库(如网格,日期选择器,弹出窗口等) 为了使组件相互通信,我实现了基于以下两个规则的发布/订阅机制: 发布者:事件 - >信息 订阅者:消息 - >事件
除此之外,我使用了很多自定义事件,使用jQuery设置,并且有一种方法(使用数据属性)为每个组件定义应该在加载时触发哪个事件。
例如: 网格触发了初始化'加载事件,'初始化'触发'刷新'等
现在,我可以使用一个触发'初始化'负载 当datepicker发布消息“刷新”时会出现问题。订阅了网格事件。 那么会发生什么:
这就是在'初始化' 事件之前触发网格的' 事件的方式,显然是一个问题
我正在考虑实现某种事件队列,而不是触发事件,而是将其添加到队列中,然后再处理,但由于JavaScript基本上是单线程的,所以实现它有点烦人。 >
问题: 任何想法如何解决这一问题?包括上述或任何其他可能的解决方案
非常感谢你的时间
答案 0 :(得分:0)
如何在需要的每个控件中使用jquery延迟对象进行内部同步?我不能给你一个具体的例子,因为我不知道你的代码是如何构造的。例如,您有一个jquery延迟对象,表示Grid组件的“初始化”状态:将其称为“gridInitialzed”。理想情况下,它封装在Grid组件中。您需要确保在date_changed处理程序(或任何其他需要它)之前调用此对象。当Grid触发它的“初始化”事件时,它会调用“gridInitialized.resolve()”。
The grid's handler for the "date_changed" event contains:
gridInitialized.done(function() {
*code that eventually fires the grid "refresh" event*
});
如果gridInitialized处于已解析状态,则会立即调用传递给.done的函数。如果不是,则执行被延迟,直到调用.resolve。处理程序在任何一种情况下都会立即返回。