枚举WinJS对象的events / eventListeners

时间:2012-12-24 23:03:19

标签: winjs

我正在使用纯WinJS作为一个项目(没有jQuery)并且遇到了让我难过的要求。

假设我有一个名为'bob'的DOM元素(尽管这可能不一定是DOM元素)。要附加事件监听器,我会这样做:

bob.addEventListener('click', function ()
{
  // Some code goes here
});

没有什么可以阻止我向'bob'添加大量的事件监听器,即使对于相同的事件名称(这很好,因为它们只是排队) - 这就好了!

我需要能够枚举附加到给定对象的事件/侦听器,以便我可以在运行时选择性地替换或调整其中的一些。

关于如何实现这一点的任何想法?

2 个答案:

答案 0 :(得分:2)

无法枚举使用addEventListener添加的事件。不推荐你添加活动的方式(至少我是:)。您正在使用addEventListener,但随后使用匿名方法。如果你这样做,那么你将永远无法删除该事件,因为你没有它的句柄。我建议创建你的函数然后分配命名函数(myelement.addEventListener("event", myfunction))。每次向元素添加事件时,只需将其添加到集合(一个悬挂在元素本身上的数组),然后您就可以获得事件列表。

答案 1 :(得分:0)

事实证明,在某些情况下,您可以枚举附加的事件侦听器。

如果你在一个对象上使用'Events'Mixin,那么一旦你调用了一个混合方法(addEventListener,removeEventListener或dispatchEvent),你的目标对象将获得一个名为_listeners的属性(假设它没有'已存在)。

对于一个实际示例,这是一个函数,它计算使用此mixin的对象的附加事件侦听器的数量:

/*
 * Counts the number of attached listeners
 */
 countListeners: function()
 {
    var count = 0;

    if (this._listeners)
    {
       var key;

       for (key in this._listeners)
       {
          if (this._listeners.hasOwnProperty(key))
          {
             count++;
          }
       }
    }

    return count;
 }

希望这有助于某人!