当某些事件的所有事件处理程序都已完成时,我正在尝试执行某些操作。
我的想法是在事件中传递一个对象:
self.trigger("my_event", {handlers: x, callback: function});
在处理程序中,我会写一些类似的东西:
handler = function(lock){
lock.handlers --;
if (lock.handlers == 0){
lock.callback();
}
}
(显然这是锁定对象的责任,但你可以看到这个想法)
但我不知道如何获取有关为该事件注册的处理程序数量(在我的示例中为x
)的信息。这可能吗?还有其他方法可以做到这一点吗?
答案 0 :(得分: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');
}
日志序列将始终为一,二,三。因此,在调用“触发器”之后,您似乎可以简单地执行操作。但是,如果任何回调函数使用延迟(例如使用“setTimeout”),那么你会遇到另外一个问题。