【发布时间】:2014-09-05 23:40:15
【问题描述】:
我已经阅读 StackOverflow 很多年了,但我终于有一个问题需要帮助,但我找不到正确的答案。
目前情况: 我有一个自定义 JS 组件库(如网格、日期选择器、弹出窗口等) 为了让组件之间能够相互通信,我基于以下两条规则实现了 pub/sub 机制: 发布者:事件 -> 消息 订阅者:消息 -> 事件
除此之外,我还使用了很多自定义事件,使用 jQuery 设置,并且有一种方法(使用数据属性)可以为每个组件定义在加载时应该触发哪个事件。
例如: 网格在加载时触发“初始化”事件,“初始化”触发“刷新”等。
现在,我可以有一个日期选择器,它也会在加载时触发“初始化” 当日期选择器发布消息,网格的“刷新”事件已订阅时,就会出现问题。 然后发生的事情是:
- 日期选择器'initialize'在加载时触发
- 在初始化值发生更改时,会触发 'change' 事件
- 'change' 事件发布一条消息,比如说 'date_changed'
- 网格监听消息并触发'refresh'事件
这就是在 'initialize' 事件之前触发网格的 'refresh' 事件的方式,这显然是一个问题
我正在考虑实现某种事件队列,它不会触发事件,而是将其添加到队列中,然后再进行处理,但是由于 JavaScript 基本上是单线程的,所以实现起来有点烦人
问题: 任何想法如何解决这一问题?包括上述,或任何其他可能的解决方案
非常感谢您的宝贵时间
【问题讨论】:
-
每个组件中的一个标志,它在初始化之前不能
refresh?例如,如果您在元素上初始化之前尝试将方法传递给它们,一些 jQueryUI 小部件会抛出这样的错误 -
使用异步事件...
-
@Bergi - 我不确定你指的是什么。能给个例子或链接吗?
-
@charlietfl - 是的,这是一个快速的解决方案,实施它并且似乎工作正常。我必须添加到刷新事件:如果未初始化,则先初始化,然后如果网格确实自动刷新就停止。考虑所有可能性。如果我找不到更优雅的解决方案,那么它可能会保持这种状态
-
@Bergi - 你的意思是 Backbone 实现了它们吗?
标签: javascript jquery events