我不认为这是特别古怪,但试图控制我的JavaScript代码(如果 可能真的控制JavaScript ;-))我我已将所有客户端JavaScript包装在可爱的对象中。或者尽可能地让它变得可爱。
我遇到的第一个问题是将事件附加到这些对象中的任何内容。很快就发现这个并不总是意味着你认为它意味着什么,因此我的代码必须看起来像这样:
var obj = this;
_map.AttachEvent("onclick", function(event){ obj.onClickMap(event); });
这样所有事件都会调用当前对象。乔布斯很好'联合国
但是,从Virtual Earth地图对象中分离事件时,您需要传递最初分配的功能,以便仅分配该功能。这不起作用:
_map.DetachEvent("onclick", function(event){ obj.onClickMap(event); });
......并非我真正期待它。但我无法弄清楚如何分离该事件!
答案 0 :(得分:1)
很明显你可以存储这个功能:
var obj = this;
var func = function(event){ obj.onClickMap(event); }
_map.AttachEvent("onclick", func);
然后分开:
_map.DetachEvent("onclick", func);
这有帮助吗?
答案 1 :(得分:0)
啊哈!突如其来的灵感使我得到了这个解决方案(这可能是也可能不是最好的方式,但确实有效)。附加事件时我使用:
// Attach map events
var obj = this;
_currentOnClickMapHandler = function(event){ obj.onClickMap(event); };
_map.AttachEvent("onclick", _currentOnClickMapHandler);
其中 _currentOnClickMapHandler 是班级中的全局。
当我想要分离事件时,我使用它:
if (_currentOnClickMapHandler)
{
_map.DetachEvent("onclick", _currentOnClickMapHandler);
}
似乎工作,原因很明显,为什么我不太关心它作为解决方案。如果有人有更好的想法(或者同意这个解决方案,那么我可以感觉更安全!)那么请告诉我。