0

これは特に風変わりだとは思いませんが、JavaScript コードを制御しようとして (JavaScript を実際に制御できる場合;-) )、クライアント側のすべての JavaScript を素敵なオブジェクトでラップしてきました。または、とにかくそれらを作ることができるのと同じくらい素敵です。

私が最初に遭遇した問題の 1 つは、これらのオブジェクト内の何かにイベントを関連付けることでした。これが常にあなたが思っていることを意味するとは限らないことがすぐに明らかになりました。その結果、私のコードは次のようになります。

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 に答える