2013-03-10 109 views
0

我创建了包含通过Openlayers显示的地图的扩展Ext.Panel.panel组件,该组件位于Ext.Window.window中。 但经过负载页面,地图只显示部分: http://habrastorage.org/storage2/17f/1be/3bd/17f1be3bdc2a9765c1852d93a95ee1b8.png在Ext.Window.window中显示地图不完全

Ext.define('MA.view.components.OpenlayersPanel', 
{ 
    extend: 'Ext.panel.Panel', 
    alias: 'widget.openlayerspanel', 
    multiSelect: true, 

    initComponent: function() 
    { 
     this.callParent(arguments); 
     this.on('afterrender', this.afterRender, this); 
    }, 

    afterRender: function() 
    { 
     this.map = new OpenLayers.Map(this.body.dom.id); 
     this.layer = new OpenLayers.Layer.OSM('OSM Map'); 
     this.fromProjection = new OpenLayers.Projection("EPSG:4326"); 
     this.toProjection = new OpenLayers.Projection("EPSG:900913"); 
     this.position = new OpenLayers.LonLat(75.1, 61.15).transform(this.fromProjection, this.toProjection); 
     this.zoom = 12; 
     this.map.addLayer(this.layer); 
     this.layer.setIsBaseLayer(true);   
     this.map.setCenter(this.position, this.zoom); 
    } 
}); 

app.js:

Ext.application(
{ 
    requires: ['Ext.container.Viewport'], 
    name: 'MA', 
    appFolder: 'app', 
    controllers: 
     [ 
      'Map' 
     ], 
    launch: function() 
    { 
     Ext.create('Ext.window.Window', 
      { 
       layout: 
       { 
        type: 'vbox' 
       }, 
       items: 
        [ 
         { 
          xtype: 'openlayerspanel' 
         }, 
         { 
          xtype: 'button', 
          text: 'Load', 
         } 
        ] 
      }).show(); 
    } 
}); 

当我调整浏览器,地图刷新和正常显示。 什么修复使其工作?

回答

1

如果没有工作,除了调整大小,试图以编程方式调整:

//inside window listeners 
show: function(){ 
    this.setWidth(this.getWidth() + 1); // or height 
} 

或使用超时定义地图 - 创建地图显示窗口后: 不AfterRender阶段,但显示

show: function(){ 
    setTimeout(function(){ 
    // init map here 
    }, 100) 
} 

或使用此代码:

function ShowMapWindow() { 
    Ext.create('Ext.window.Window', { 
     width: 400, 
     height: 300, 
     items: [{ 
      loader: { 
       loadMask: { showMask: true }, 
       renderer: 'frame', 
       url: 'http://www.openstreetmap.org/export/embed.html?bbox=37.314,55.568,38.031,55.927&layer=mapnik' 
      } 
     }], 
     layout: "fit", 
     listeners: { 
      close: function() { 
       this.remove(true); 
      } 
     }, 
     modal: true 
    }).show(); 
} 

enter image description here

+0

如果调整大小Ext.Window.window - 地图无变化,如果调整大小浏览器 - 地图刷新。但是$(window).resize()映射也不会改变。 – 2013-03-10 07:38:12

+0

也不行... – 2013-03-10 15:09:52

+0

看着变化 – 2013-03-10 16:31:28

0

如果放大zoomIn()然后放大zoomOut(),该怎么办?或者将初始缩放设置为11,然后在将地图居中后调用zoomIn()。

1

我正在面对自己的问题,与第一个解决方案与幻想截图的人是错误的。它与调整大小完全没有关系,因为如果您使用Google地图而不是OSM,则它可以很好地工作。问题在于缺少地图属性,比如SRS,BBOX等。查看OpenLayers属性的文档,它将起作用。