代码之家  ›  专栏  ›  技术社区  ›  Jason

在虚拟地球地图上附加和分离事件

  •  0
  • Jason  · 技术社区  · 16 年前

    我不 认为 这是特别奇怪的,但为了控制我的javascript代码(如果它 可以真正控制javascript;-)我已经将所有客户端的javascript封装在可爱的对象中。或者我能做的最可爱的。

    我遇到的第一个问题是将事件附加到这些对象中的任何内容。很快就发现 并不总是意味着你认为它意味着什么,因此我的代码必须如下所示:

    var obj = this;
    _map.AttachEvent("onclick", function(event){ obj.onClickMap(event); });
    

    这样所有事件都会调用当前对象。乔布斯是个好人。

    但是,当从虚拟地球地图对象中分离事件时,您需要传递最初分配的函数,以便只传递未分配的函数。这不起作用:

    _map.DetachEvent("onclick", function(event){ obj.onClickMap(event); });
    

    …这不是我所期望的。但我不知道该如何把这件事分开!

    2 回复  |  直到 16 年前
        1
  •  1
  •   samjudson    16 年前

    很明显你可以存储函数:

    var obj = this;
    var func = function(event){ obj.onClickMap(event); }
    _map.AttachEvent("onclick", func);
    

    然后分离:

    _map.DetachEvent("onclick", func);
    

    这有帮助吗?

        2
  •  0
  •   Jason    16 年前

    啊哈!突然的灵感让我想到了这个解决方案(也许这不是最好的方法,但确实有效)。当附加事件时,我使用此:

    // Attach map events
    var obj = this;
    _currentOnClickMapHandler = function(event){ obj.onClickMap(event); };
    _map.AttachEvent("onclick", _currentOnClickMapHandler);
    

    哪里 _当前时钟管理器 是类中的全局变量。

    当我想要分离事件时,我使用此:

    if (_currentOnClickMapHandler)
    {
        _map.DetachEvent("onclick", _currentOnClickMapHandler);
    }
    

    似乎有效,我很清楚原因,所以我不太担心这是一个解决办法。如果有人有更好的想法(或者同意这个解决方案,这样我就可以对它感到更安全!)那么请告诉我。

    推荐文章