OpenLayers弹出窗口中的qx.ui.root.Inline contentDiv =>按钮不会点击!

时间:2010-10-27 17:49:06

标签: javascript openlayers qooxdoo

我正在开发一个整合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事件的任何提示都将受到赞赏!!

2 个答案:

答案 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以某种方式阻止了事件。

这是我调试的第一步。希望有所帮助。

此致   亚历