У меня тоже была эта проблема.Проблема в том, что макет страницы jQuery Mobile мешает вычислению размера объекта OpenLayers.Map.То, что у вас есть, это средство просмотра, которое имеет полную ширину, но нулевую высоту.
Вот что мы сделали (большая часть этого кода была адаптирована из примера JQuery Mobile )
Во-первых, переопределите функцию OpenLayers.Map.getCurrentSize ():
OpenLayers.Map.prototype.getCurrentSize = function() {
var mapDiv = $(this.div);
return new OpenLayers.Size(mapDiv.width(), mapDiv.height());
};
Во-вторых, мы структурировали страницу JQM следующим образом:
<div data-role="page">
<div data-role="header">
<h3>Map Viewer</h3>
</div>
<div data-role="content" id="viewerContainer">
<div id="viewer">
</div>
</div>
<div data-role="footer">
<h3>My footer</h3>
</div>
</div>
Затем мы добавили функции для подготовкиправильная высота контейнера для карты OpenLayers и впоследствии для обеспечения правильной высоты
function fixContentHeight(olMap) {
var footer = $("div[data-role='footer']:visible"),
content = $("div[data-role='content']:visible:visible"),
viewHeight = $(window).height(),
contentHeight = viewHeight - footer.outerHeight();
if ((content.outerHeight() + footer.outerHeight()) !== viewHeight) {
contentHeight -= (content.outerHeight() - content.height() + 1);
content.height(contentHeight);
}
content.width($(window).width());
olMap.updateSize();
}
function ensureNonZeroHeight(containerid) {
var footer = $("div[id='" + containerid + "'] > div[data-role='footer']"),
header = $("div[id='" + containerid + "'] > div[data-role='header']"),
content = $("div[id='" + containerid + "'] > div[data-role='content']"),
viewHeight = $(window).height(),
contentHeight = viewHeight - footer.outerHeight() - header.outerHeight();
if ((content.outerHeight() + footer.outerHeight() + header.outerHeight()) !== viewHeight) {
contentHeight -= (content.outerHeight() - content.height() + 1);
content.height(contentHeight);
content.width($(window).width());
}
}
Затем, наконец, OpenLayers.Map настраивается так:
ensureNonZeroHeight("viewerContainer");
var map = new OpenLayers.Map("viewer", { /* other options */ });
/* Other map initialization code */
fixContentHeight(map);
И убедитесь, что fixContentHeight () вызывается всякий раз, когда эта страница представлена.