Extjs 无法读取属性';gmap&x27;空的

Extjs 无法读取属性';gmap&x27;空的,extjs,Extjs,我正在学习如何使用Ext.js框架,我使用GoogleAPI构建了一个地图,我正在使用GMapPanel小部件 在初始化应用程序时,我遇到了一些识别小部件的问题。我想在控制器上获取地图,但我一直收到以下错误: 未捕获的TypeError:无法读取null的属性“gmap” 在constructor.init(MapController.js?_dc=20151109082919:46) 在新构造函数处(ext all rtl debug.js?_dc=20151109082919:63176)

我正在学习如何使用Ext.js框架,我使用GoogleAPI构建了一个地图,我正在使用GMapPanel小部件

在初始化应用程序时,我遇到了一些识别小部件的问题。我想在控制器上获取地图,但我一直收到以下错误:

未捕获的TypeError:无法读取null的属性“gmap” 在constructor.init(MapController.js?_dc=20151109082919:46) 在新构造函数处(ext all rtl debug.js?_dc=20151109082919:63176) 在构造函数处[作为自身](ext all rtl debug.js?_dc=20151109082919:12296) 在Object.widget(ext all rtl debug.js?_dc=20151109082919:14662) 在constructor.create(ext all rtl debug.js?_dc=20151109082919:26228) 在constructor.lookupComponent(ext all rtl debug.js?_dc=20151109082919:123938) 在constructor.prepareItems(ext all rtl debug.js?_dc=20151109082919:124418) 在constructor.add(ext all rtl debug.js?_dc=20151109082919:123436) 在constructor.initItems(ext all rtl debug.js?_dc=20151109082919:123861) 在constructor.initComponent(ext all rtl debug.js?\u dc=20151109082919:123821

我正在控制器上使用以下代码:

init: function () {

var me = this;
var w = me.getView();

var flightPathCoordinates = [
        {lat: (...), lng: (...)},
        {lat: (...), lng: (...)},
        {lat: (...), lng: (...)},
        {lat: (...), lng: (...)}
];


var flightPath = new google.maps.Polyline({
        path: flightPathCoordinates,
        strokeColor: '#42ffcf',
        strokeOpacity: 0.6,
        strokeWeight: 5
});

flightPath.setMap(w.down('gmappanel').gmap);
我不得不做一些和我现在尝试做的类似的事情,它成功了,但是当有人点击一个特定的按钮时,就会调用这个函数

startViewer: function (btn) {

...

var map = btn.up('map');

...

flightPath.setMap(btn.up('map').gmap);  

}
现在,我想做和我在startViewer()函数上做的一样的事情,但是当有人启动应用程序时,我会自动执行,我该怎么做呢


谢谢。

通常,您会使用
boxready
()事件来执行类似操作。当组件完成布局时,该事件会触发一次且仅会触发一次。因此,通常情况下,您会侦听该事件,并且在该事件完成后,您可以执行您想要的任何代码。因此,在您的窗口配置中,您可以执行以下操作:

listeners: {
  boxready: function(w){
      var map = w.down('gmappanel').gmap;
      //etc
  }
}
但是,在这种情况下,这将不起作用,因为即使您的窗口可能已经完成了布局,gmappanel可能仍在创建实际的google地图。因此,为了适应这种情况,您可以使用gmappanel提供的
mapready
事件。因此,您可以对窗口配置执行类似操作:

items: [{
   xtype: 'gmappanel',
   listeners: {
      mapready: function(gmappanel){
          var map = gmappanel.gmap;
      }
   }
}]