0

我不认为这特别古怪,但是为了控制我的 JavaScript 代码(如果可以真正控制 JavaScript ;-))我一直在将所有客户端 JavaScript 包装在可爱的对象中。或者无论如何我都可以让它们变得可爱。

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

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

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

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

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

...并不是我真正期望的那样。但我不知道如何分离那个事件!

4

2 回答 2

1

很明显你可以存储函数:

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

然后分离:

_map.DetachEvent("onclick", func);

这有帮助吗?

于 2009-05-26T13:39:03.690 回答
0

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

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

其中_currentOnClickMapHandler是类中的全局变量。

当我想分离事件时,我使用这个:

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

似乎有效,原因对我来说相当明显,所以我不太关心它作为解决方案。如果有人有更好的想法(或同意此解决方案,以便我对此感到更安全!),请告诉我。

于 2009-05-26T13:39:06.060 回答