2012-05-24 139 views
0

代碼示例的新近創建的元素:jQuery的事件:通知過去事件

var Events = $({}); 

Events.on('myCustomEvent', function(){ console.log('myCustomEvent 1') }) 

Events.trigger('myCustomEvent'); // I want notify the previous binds and all binds in future 

$.ajax({...}).success(function(res){ 
    Events.on('myCustomEvent', function(){ console.log('myCustomEvent 2') }) 
}); 

// when ajax or other long process will be finished 'myCustomEvent' must be fired 

「myCustomEvent 1」將被印刷,因爲它的綁定觸發之前將被稱爲和 「myCustomEvent 2」必須被太

觸發

它在jQuery中的任何解決方案?

+0

是什麼'$({})'? – thecodeparadox

+0

@thecodeparadox一個jQuery對象內的空javascript對象。 –

+0

如果在觸發事件的時刻處理程序尚未分配,如何顯示myCustomEvent 2?如果'myCustomEvent'是一次性事物,您可能想使用延遲對象。如果您向已解析的延遲對象添加新的回調,則會立即調用它們。但要決定這是否是一個可行的解決方案,您必須提供有關您的實際問題的更多信息。你想達到什麼目的?你需要做什麼? –

回答

0

看起來像你想要的不是什麼事件,因爲它是一個發佈/訂閱系統或實現Observer模式的代碼。在發佈消息後,大多數這些實現都無法追溯調用訂閱者。我已經完成了,但是您需要小心,使用該系統的任何人都知道可能會多次發佈一條消息。不幸的是,我不能分享代碼,因爲它是我的僱主所擁有的。

只要搜索「JavaScript中的觀察者模式」或「JavaScript中的pubsub」,將爲您提供一個好的庫。通常,這些使用「主題」的哈希到當該主題發佈時被調用的函數數組。訣竅是還要保存發佈時間的歷史記錄。當某人訂閱已發佈的主題時,請重新發布該主題。

希望這足以讓你開始。

+0

我想將事件與Deferred對象 – im4LF

0

我認爲解決的辦法是$ .Callbacks

Callbacks.highlight = $.Callbacks('memory') 

// ComponentB 
$(window).hashchange(function(){ 

    $.ajax({ /* load items of #ListB */ }).success(function(data){ 

     /* append items to dom */ 

     if (/listA=123/.test(location.hash)) 
      Callbacks.highlight.fire(); 
    }) 

    $('#ListB').on('click', 'a', function(){ /* highlight the same in #ListA by alg2 */ }) 
}) 

// ComponentA 
$(window).hashchange(function(){ 

    $.ajax({ /* load items of #ListA */ }).success(function(data){ 

     /* append items to dom */ 
     Callbacks.highlight.add(/* highlight item */) 
    }) 

    $('#ListA').on('click', 'a', function(){ /* highlight the same in #ListB by alg1 */ }) 
})