Я разрабатываю веб-gis с Extjs 6.0
и OpenLayers 3.6.0
в MVVM Architecture. Я хочу поставить ol.map
на номер Ext.panel.Panel
. Общий вид проекта как ниже:Как я могу поместить «ol.Map» в «Ext.panel.Panel»?
Ext.define('MyApp2.view.main.Main', {
extend: 'Ext.container.Container',
requires: [
'MyApp2.view.main.MainController',
'MyApp2.view.main.MainModel'
],
xtype: 'app-main',
controller: 'main',
viewModel: {
type: 'main'
},
layout: {
type: 'border'
},
items: [{
xtype: 'panel',
bind: {
title: '{name}'
},
region: 'west',
html: 'its me! - West Panel',
width: 125,
minWidth: 100,
maxWidth: 250,
}, {
xtype: 'panel',
region: 'center',
collapsible: false,
html: '<div id="map" class="map"></div>',
listeners: {
beforerender: 'beforerender',
afterrender: 'afterrender'
}
}]
});
первым я Отрендерьте panel
с html
конфигурации: <div id="map" class="map"></div>
, а затем в afterrender
слушателя инициализации ol.map
следующим:
Ext.define('MyApp2.view.main.MainController', {
extend: 'Ext.app.ViewController',
requires: [
'Ext.window.MessageBox'
],
alias: 'controller.main',
afterrender: function() {
map = new ol.Map({
target: 'map',
layers: [
new ol.layer.Tile({
title: "Global Imagery",
source: new ol.source.TileWMS({
url: 'http://localhost:8080/geoserver/world/wms?service=WMS',
params: {LAYERS: 'world:worldRaster', VERSION: '1.1.1'}
})
})
],
view: new ol.View({
projection: 'EPSG:4326',
center: [35, 41],
zoom: 4
})
});
},
beforerender: function(){
console.log("Salam Bar Mahdi");
}
});
код не дает какой-либо ошибки , но когда я запускаю его, все хорошо, за исключением случаев, когда я хочу увеличить масштаб карты, он приближает другое место. см следующей картины: Эта ошибка остается стабильной, пока в index.html
файле я определить следовать css
:
<style>
.map {
height: 600px;
width: 600px;
}
</style>
Этого css
положил ol.map
в 600x600
коробки, но я хочу ol.map
прилегания к Ext.panel.Panel
.
Как это сделать?
Обеспечить некоторые ссылки на документацию! –
Можете ли вы создать скрипку? http://fiddle.sencha.com –
В вашем обработчике после того, как вы объявили свою переменную карты, вы не можете просто установить высоту и ширину карты на основе размеров панели? Панель обычно передается в качестве первого параметра для последующего. Я сделал аналогичные вещи при использовании карт Google, google maps api также позволяет запускать событие изменения размера, чтобы сообщить ему размер на основе его содержащего элемента, например панели в вашем примере. Можете ли вы сделать что-то подобное с OL api? – mindparse