我正在开发一个整合OpenLayers和Qooxdoo的项目......到目前为止,我已经取得了很大的成功。但是现在我希望能够将qooxdoo小部件放在OpenLayers弹出窗口(在这种情况下为FramedCloud)并且发生了一些奇怪的事情 - 按钮不会单击!
悬停事件似乎正在起作用,我已经确定正在执行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
(请注意,“source”链接会加载两个 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
});
我认为禁用弹出窗口本身的所有事件处理(例如,请注意,您现在可以通过在弹出窗口内拖动来平移地图 - 这是次优的,但证明了这一点)。并且,这没有帮助......这似乎表明,地图本身的事件处理可能阻止了事件。我无法在地图上禁用鼠标事件,原因很明显。
我打算将其传递给OpenLayers邮件列表,以期获得更多帮助......但与此同时,任何人都有任何解决方法的想法?对我来说很奇怪,有些事件(鼠标悬停)工作正常,但点击却没有。我现在甚至打开黑客。
另外,我真的很难调试这个......我尝试使用Firebug(和Safari调试器)中的“Break on Next”功能,但是由于qooxdoo在内部运行了几个间隔定时器,我无法抓住由于噪音而导致的点击(间隔代码总是在我点击之前出现)。关于如何在调试器中捕获click事件的任何提示都将受到赞赏!!
答案 0 :(得分:1)
我遇到了同样的问题。点击Qooxdoo不起作用。我使用Qooxdoo v1.6和OpenLayers v2.12。问题是弹出窗口和Map-Navigator上的mousedown事件。在我的情况下,以下工作正常:
// looking for the navigation control of the map
var controls = map.controls;
var navigator;
for(var i = 0; i < controls.length; i++) {
if(controls[i].CLASS_NAME == "OpenLayers.Control.Navigation")
navigator = controls[i];
}
popup.events.unregister("mousedown", popup, popup.onmousedown); // disable the mousedown-event
popup.events.register("mouseover", navigator, navigator.deactivate()); // on mouseover: deactivate the navigation-control of the map
popup.events.register("mouseout", navigator, navigator.activate()); // on mouseout: activate the navigation-control of the map
我希望,这对任何人都有帮助。
答案 1 :(得分:0)
我刚测试了您的示例,我认为图层实现阻止了click事件。所以Click事件首先由OpenLayers处理,而qooxdoo没有得到它。
确保qooxdoo的内联实现没有任何问题。你是否已经测试了你的内联按钮而没有包含OpenLayers的东西?如果没有OpenLayers实现一切正常,你至少知道OpenLayers以某种方式阻止了事件。
这是我调试的第一步。希望有所帮助。
此致 亚历