Я работаю над проектом, который интегрирует 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);
Может ли кто-нибудь помочь мне понять, что происходит с событием click?
== РЕДАКТИРОВАТЬ ==
Спасибо, Алекс, я еще немного подключил его, чтобы попытаться понять.
Я попробовал протестировать практически тот же код за пределами карты 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), но, поскольку qooxdoo запускает несколько внутренних таймеров, я не могу поймать щелчок, потому что шума (код интервала всегда появляется до того, как я могу щелкнуть). Любые советы о том, как поймать событие щелчка в отладчике, будут оценены!