2012-07-06 49 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 
} 

很想得到這個(缺點等)

一些反饋