OpenLayers と Qooxdoo を統合するプロジェクトに取り組んでいます...これまでのところ、多くの成功を収めています。しかし、qooxdoo ウィジェットを OpenLayers ポップアップ (この場合は FramedCloud) に配置できるようにしたいのですが、奇妙なことが起こっています。ボタンをクリックしません!
ホバーイベントは動いているようで、qx.event.handler.Focus.__onNativeMouseDownが実行されていると判断したので、クリックイベントはqooxdooイベントシステムに届いているようですが(?)、qx.event.handler .Mouse._onButtonEvent が呼び出されることはありません。
OLの何かが邪魔をしているのか、私が何か間違っているのか。テスト ケースについては、次のリンクのいずれかまたは両方を参照してください。
http://s89238293.onlinehome.us/olisletest/build/index.html
http://s89238293.onlinehome.us/olisletest/source/index.html
(「ソース」リンクは、qooxdooとOpenLayers の両方の非圧縮/デバッグ バージョンをロードするため、ロードに時間がかかることに注意してください!)
上記のリンクはスケルトン qx Inline アプリに基づいて構築されています。コードの主要なカスタム部分は次のとおりです。
var map = new OpenLayers.Map("map_canvas", {
projection: new OpenLayers.Projection("EPSG:900913"),
displayProjection: new OpenLayers.Projection("EPSG:4326"),
units: "m",
numZoomLevels: 18,
maxResolution: 156543.0339,
maxExtent: new OpenLayers.Bounds(-20037508, -20037508,
20037508, 20037508.34)
});
map.addLayer(new OpenLayers.Layer.OSM());
map.setCenter(new OpenLayers.LonLat(-97.0, 38.0).transform(map.displayProjection, map.projection), 3);
var popup = new OpenLayers.Popup.FramedCloud(
"searchSelection",
new OpenLayers.LonLat(-97.0, 38.0).transform(map.displayProjection, map.projection),
new OpenLayers.Size(200, 200),
null,
null,
true,
null
);
popup.autoSize = false;
map.addPopup(popup);
var button2 = new qx.ui.form.Button("A Button");
button2.addListener("execute", function(){alert("Hello???");}, this);
var isle = document.createElement("DIV");
popup.contentDiv.appendChild(isle);
var popupIsle = new qx.ui.root.Inline(isle, false, false);
popupIsle.setLayout(new qx.ui.layout.VBox);
popupIsle.setBackgroundColor("#fff");
popupIsle.add(button2);
クリックイベントに何が起こっているのかを理解するのを手伝ってくれる人はいますか?
==編集==
アレックスに感謝します。
OL マップの外側で本質的に同じコードのテストを試みたところ、動作するので、それは解消されました。
OLポップアップオブジェクトに追加でこれを行いました:
popup.events.un({
"mousedown": popup.onmousedown,
"mousemove": popup.onmousemove,
"mouseup": popup.onmouseup,
"click": popup.onclick,
"mouseout": popup.onmouseout,
"dblclick": popup.ondblclick,
scope: popup
});
これにより、ポップアップ自体ですべてのイベント処理が無効になると思います(たとえば、ポップアップ内でドラッグしてマップをパンできるようになりました。これは最適ではありませんが、要点を証明しています)。そして、それは役に立ちませんでした...おそらく、マップ自体でのイベント処理がイベントをブロックしていることを示唆しているようです. 明らかな理由で、マップ上のマウス イベントを無効にすることはできません。
私はこれを OpenLayers メーリング リストに送信して、さらに助けが得られることを期待しています...しかし、それまでの間、誰か回避策のアイデアをお持ちですか? いくつかのイベント (マウスオーバー) は正常に機能するのに、クリックが機能しないのは私には奇妙です。現時点では、ハッキングに対してもオープンです。
また、これをデバッグするのに本当に苦労しています... Firebug(およびSafariデバッガー)の「Break on Next」機能を使用してみましたが、qooxdooは内部でいくつかのインターバルタイマーを実行しているため、クリックをキャッチできませんノイズ(クリックする前にインターバルコードが常に表示されます)。デバッガーでクリックイベントをキャッチする方法についてのヒントをいただければ幸いです!!