2009-05-26 21 views
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); }); 

......這不是我真正期待它。但我無法解決如何分離該事件!

回答

0

啊哈!突然的靈感閃現讓我想到了這個解決方案(這可能是也可能不是最好的方法,但它確實有效)。當安裝時我用這個:

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

其中_currentOnClickMapHandler是班上一個全球性的。

當我要分離的事件中,我用這個:

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

似乎工作,原因是相當明顯的我,爲什麼,所以我不會太在意它作爲一個解決方案。如果任何人有更好的主意(或者同意這個解決方案,所以我可以感覺到它更安全!),那麼請讓我知道。

1

很明顯嘛,你可以存儲功能:

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

然後分離:

_map.DetachEvent("onclick", func); 

這是否幫助?

+0

不錯的一個......你一定是在同一時間輸入的!兩個獨立的答案說,同樣的事情對我來說已經足夠好了。謝謝。 – Jason 2009-05-26 13:40:33