2012-07-06 46 views
0

我正尝试在JavaScript中使用推送器创建模块化应用程序。不同的模块需要绑定到相同的推送器事件,有时该事件嵌套在另一个事件中。此外,根据用户触发的DOM事件,这些模块会在不同的时间加载。在Pusher中实现监听器时,所有工作都是绑定?

所以,如果一个模块有一个像

env.pusher.connection.bind('connected', function() { 
    env.my_channel.bind('private_message',function(data){ ... } 
} 

一些代码,另一个模块走来,并希望听同样private_message事件。如果我编写相同的代码,会发生什么情况,即第一个绑定会被覆盖。

我在寻找的是一种实现某种监听器的方式,可能有从通道事件中删除监听器的选项。

回答

0

我自己想过一个解决方案。它包括以下步骤:

  • 继续推进事件的字典
  • 每一个想要利用推进器事件的应搜索的字典首先看是否该事件存在,如果没有,写模块第一次创建绑定并将其添加到字典中的代码

  • 当模块第一次创建绑定时,它还应该触发自定义事件并将推送器发送的数据传递给它推送事件完成

  • 是要利用推杆事件应在处理程序添加到当推进事件被触发

如果看起来很难跟随所触发的自定义事件的每个模块,这里有一个模块是里面的一些代码代码在我的问题重写(我使用jQuery的,因为jQuery是succint,并已执行自定义事件):

if (typeof(env.pusher_events['my_channel']['private_message']) == 'undefined'){ 
    env.pusher_events['my_channel']['private_message'] = true; 

    // 'pusher-connected' is defined in another module 
    // this module depends on that event but for brevity 
    // I'm not defining the 'connected' event here 

    $(document).on('pusher-connected', 'body', function(){ 
     env.my_channel.bind('private_message', function(data){ 
      $('body').trigger('pusher-my_channel-private_message', data); 
     }) 
    }) 
} 

$(document).on('pusher-my_channel-private_message', 'body', function(data){ 
    // do something useful with the data 
} 

很想得到这个(缺点等)

一些反馈