2012-03-13 112 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”),那么您遇到了另一个问题。

相关问题