无法读取null的属性'gmap'

时间:2017-03-15 11:00:48

标签: extjs

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

我在初始化应用程序时遇到一些问题需要识别小部件。我想在Controller上获取地图,但我一直收到这个错误:

  

未捕获的TypeError:无法读取null的属性'gmap'       在constructor.init(MapController.js?_dc = 20151109082919:46)       在新构造函数(ext-all-rtl-debug.js?_dc = 20151109082919:63176)       在构造函数[as self](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?_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()函数上执行相同的操作,但是当有人启动应用程序时,我该怎么做?

谢谢。

1 个答案:

答案 0 :(得分:1)

通常,您使用boxreadyapi)事件来执行此类操作。该事件只触发一次 - 当一个组件完成它的布局时。所以通常你会倾听,当它完成后你可以执行你想要的任何代码。因此,在您的窗口配置中,您可以执行以下操作:

listeners: {
  boxready: function(w){
      var map = w.down('gmappanel').gmap;
      //etc
  }
}

然而,在这种情况下不会起作用,因为即使您的窗口可以使用它的布局,gmappanel可能仍然在创建实际的谷歌地图。因此,为了适应这种情况,您可以使用gmappanel提供的mapready事件。那么你就为你的窗口配置做了类似的事情:

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