Ext Js 4 gmappanel动态更改中心

时间:2013-04-05 14:09:43

标签: javascript google-maps extjs

我有一个简单的gmappanel(extjs 4.1.1)。 如何更改地图的“中心”并使用新坐标中心刷新我的窗口?

我的代码是:

Ext.Loader.setConfig({
        enabled : true
    });
Ext.require(['Ext.window.*', 'Ext.ux.GMapPanel']);

Ext.define('AM.view.gmapwindow.GoogleMap', {
extend : 'Ext.window.Window',
alias : 'widget.gmapw',
autoShow : true,
title : 'map',
closeAction : 'hide',
width : 460,
height : 500,
border : false,
x : 40,
y : 60,
items : [{
            layout : {
                type : 'hbox',
                align : 'stretch'
            },
            flex : 1,
            items : [{
                        xtype : 'textfield'
                    }, {
                        xtype : 'button',
                         handler: function() {
//--------------------
//modify here the center 
//geoCodeAddr:'Suisse Romande, Avenue de la Gare, Sion, Svizzera'
//---------------------
                            }
                    }]
        }, {
            width : 450,
            layout : 'fit',
            height : 450,
            border : false,
            items : {
                xtype : 'gmappanel',
                center : {
                    geoCodeAddr : '4 Yawkey Way, Boston, MA, 02215-3409, USA'

                },

                markers : []
            }
        }]

});

地图很好,但如果我尝试更改中心编辑

  

geoCodeAddr

使用以下代码

this.up('gmapw').down('gmappanel').center.geoCodeAddr='Suisse Romande, Avenue de la Gare, Sion, Svizzera';
没有任何反应。

任何想法?

谢谢

2 个答案:

答案 0 :(得分:3)

如果您查看GMapPanel.js,则会在afterFirstLayout()中看到创建地图时使用geoCodeAddr。布局后设置它不会做任何事情,因为afterFirstLayout()将不再被调用。

您应该对地址进行地理编码,然后使用该地址在地图上设置中心。以下内容应该有效:

var map = this.gmap;
var geocoder = new google.maps.Geocoder();
var request = {address: 'Suisse Romande, Avenue de la Gare, Sion, Svizzera'};
var callBack = function(geocoderResults, geocoderStatus) {
    if(geocoderStatus === 'OK') {
        var location = geocoderResults[0].geometry.location;
        var latLng = new google.maps.LatLng(location.lat(), location.lng());
        map.setCenter(latLng);
    }
}
geocoder.geocode(request,callBack);

答案 1 :(得分:1)

我已经修改了Arun V的答案,让它完全适用于我的例子。

再次感谢Arun V:

var request = {address: 'Suisse Romande, Avenue de la Gare, Sion, Svizzera'};
var callBack = function(geocoderResults, geocoderStatus) {
    if(geocoderStatus === 'OK') {
        var location = geocoderResults[0].geometry.location;
        var latLng = new google.maps.LatLng(location.lat(), location.lng());
        //get current Id from document useful if you have more than one map
        //you can't use "this.gmap" reference here because it's not in your scope
        var idMapW = this.document.activeElement.id;
        Ext.ComponentQuery.query('#'+idMapW)[0].down('gmappanel').gmap.setCenter(latLng);
        }
    };
    this.up('gmapw').down('gmappanel').geocoder.geocode(request,callBack);