我正在开发一个集成了OpenLayers和Qooxdoo的项目......到目前为止我已经取得了很多成功。但是现在我希望能够将qooxdoo小部件放置在OpenLayers弹出窗口中(在这种情况下是FramedCloud),并且发生了一些奇怪的事情 - 按钮不会点击!qx.ui.root.Inline在OpenLayers弹出的contentDiv =>按钮不会点击!
悬停事件似乎正在工作,并且我确定qx.event.handler.Focus .__ onNativeMouseDown正在执行,所以click事件似乎正在进入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嵌入式应用上面建立的联系,这里的代码的主要习俗部分:
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
});
我想这将禁用所有的事件处理上弹出本身(注意,例如,您现在可以通过popup-内拖动平移地图 - 这是不理想的,但证明了这一点)。而且,这并没有帮助......这似乎表明,地图上的事件处理本身可能会阻止事件发生。我无法禁用地图上的鼠标事件,原因很明显。
我打算将这个信息传递给OpenLayers邮件列表,希望得到更多的帮助......但同时,任何人都有任何解决方法的想法?对我来说很奇怪的是,一些事件(鼠标悬停)工作正常,但点击没有。在这一点上,我甚至会打开黑客。我试着在Firebug(和Safari调试器)中使用“Break on Next”功能,但由于qooxdoo在内部运行多个间隔定时器,所以我不能赶上点击,因为噪音(间隔代码总是出现之前,我可以点击)。任何提示如何捕捉调试器中的点击事件将不胜感激!