2012-03-13 47 views
0

我試圖執行一些操作,當一些事件的所有事件處理程序完成時。如何等待骨幹中的所有事件處理程序?

我的想法是傳遞事件的對象:

self.trigger("my_event", {handlers: x, callback: function}); 

而在處理我寫的東西,如:

handler = function(lock){ 
    lock.handlers --; 
    if (lock.handlers == 0){ 
    lock.callback(); 
    } 
} 

(顯然這會是鎖定對象的責任,但你可以看到這個想法)

但我不知道如何獲取有關該事件註冊的處理程序數(在我的示例中爲x)的信息。這可能嗎?有沒有其他方法可以做到這一點?

+1

如果您還在使用jQuery,那麼您可以使用Deferred對象的功能:http://api.jquery.com/category/deferred-object/&http://www.erichynds.com/jquery/使用-deferreds-in-jquery /,特別是'jQuery.when()'函數:http://api.jquery.com/jQuery.when/ – biziclop 2012-03-13 16:32:28

回答

1

我相信註冊處理程序都是由「觸發器」函數本身調用的;所以當這個調用返回時,每個處理程序也都有。考慮這個例子:

function checkTriggers() { 
    var o = {}; 
    _.extend(o, Backbone.Events); 
    o.on('foo', function(){console.log('ONE');}); 
    o.on('foo', function(){console.log('TWO');}); 
    o.trigger('foo'); 
    console.log('THREE'); 
} 

日誌序列將永遠是一,二,三。所以看起來你可以簡單地在「trigger」調用之後執行你的操作。但是,如果任何回調函數使用延遲(例如,使用「setTimeout」),那麼您遇到了另一個問題。

相關問題