我正在开发一个集成 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 在内部运行多个间隔计时器,我无法捕捉到点击,因为噪音(间隔代码总是在我点击之前出现)。任何有关如何在调试器中捕获点击事件的提示将不胜感激!