如何等待骨干中的所有事件处理程序?

时间:2012-03-13 15:50:23

标签: javascript backbone.js

当某些事件的所有事件处理程序都已完成时,我正在尝试执行某些操作。

我的想法是在事件中传递一个对象:

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

在处理程序中,我会写一些类似的东西:

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

(显然这是锁定对象的责任,但你可以看到这个想法)

但我不知道如何获取有关为该事件注册的处理程序数量(在我的示例中为x)的信息。这可能吗?还有其他方法可以做到这一点吗?

1 个答案:

答案 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”),那么你会遇到另外一个问题。