Я работаю над проектом, который объединяет OpenLayers и Qooxdoo ... пока у меня много успеха. Но теперь я хочу иметь возможность размещать виджеты qooxdoo в всплывающем окне OpenLayers (FramedCloud в этом случае), и что-то странное происходит - кнопка не будет щелкать!qx.ui.root.Inline в OpenLayers popup 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, поэтому требуется некоторое время, чтобы загрузить)
ссылки выше сборок на скелете ого Встраиваемого приложения, вот основная пользовательская часть коды:
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);
Может ли кто-нибудь помочь мне выяснить, что происходит с событием click?
== EDIT ==
Спасибо Алекс, я сделал еще немного затыкать на него, чтобы попытаться выяснить.
Я попробовал проверку по существу того же кода вне 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 в надежде на помощь ... но в то же время у кого-нибудь есть идеи для обходного пути? Настолько странно, что некоторые события (mouseover) работают нормально, но щелчок не делает. Я открыт даже для взлома в этот момент.
Кроме того, у меня очень тяжелая отладка этого ... Я попытался использовать функцию «Break on Next» в Firebug (и отладчике Safari), но поскольку qooxdoo запускает несколько интервальных таймеров внутри, я не могу поймать щелчок из-за шума (код интервала всегда появляется, прежде чем я могу щелкнуть). Любые советы о том, как поймать событие click в отладчике, будут оценены!