我在使用 ST2.3 时遇到问题。我已经从 2.1 升级,并且我有几个回归,现在工作正常。然而,似乎肯定被打破的一个问题是 Google api 周围的地图包装器。我的应用程序在测试和开发模式下运行良好,但一旦为生产而构建,地图就会停止工作。
它似乎中断的代码位于 setMapCenter 函数的 Map 代码中。
setMapCenter:function(e){var b=this,d=b.getMap(),a=b.getMapOptions(),c=(window.google||{}).maps;if(c){if(!e){if(d&&d.getCenter){e=d.getCenter()}else{if(a.hasOwnProperty("center")){e=a.center}else{e=new c.LatLng(37.381592,-122.135672)}}}
断点似乎就行了:new c.LatLng(37.381592,-122.135672)
.
为什么它会突然开始在生产构建上失败?
更新 这是堆栈跟踪,但由于代码被混淆/缩小,我无法找出问题所在:
Uncaught TypeError: undefined is not a function VM1471:1
Ext.define.setMapCenterVM1471:1
Ext.define.updateUseCurrentLocationVM1471:1
jVM1471:1
b.implement.initConfigVM1471:1
ETC...
奇怪的是,这使用 ST2.1 工作。它也适用于 ST2.3,但仅适用于测试/调试模式。最初显示视图时,我的代码甚至没有设置地图的中心:
这是地图视图:
Ext.define('MyApp.view.offices.OfficeMap', {
extend: 'Ext.Panel',
alias: 'widget.officemapview',
requires: [
'Ext.Map'
],
config: {
layout: 'fit',
items: [
{
xtype: 'map',
listeners: {
activate: function(me, newActiveItem, oldActiveItem, eOpts){
console.log("activate fired");
},
maprender: function () {
console.log("maprender fired");
var gMap = this.getMap();
this.fireEvent('googleMapRender', gMap);
}
}
}
],
officeRecord: null
}
});
这是从视图接收渲染事件的控制器代码:
onGoogleMapRender: function (googleMap) {
var record = this.selectedOffice;
var longi = record.get("Longitude");
var lati = record.get("Latitude");
console.log("About to create google maps pos")
console.log("About to create google maps marker")
var marker = new google.maps.Marker({
position: new google.maps.LatLng(lati, longi)
});
console.log("About to set maps map object")
marker.setMap(googleMap);
setTimeout(function () {
console.log("map setTimeout")
// weird timeout issue? - http://stackoverflow.com/questions/15041697/sencha-touch-google-map-and-centering-a-marker
googleMap.setZoom(17);
googleMap.panTo(pos);
}, 500);
以下浏览器上的错误是:
Chrome - 未捕获的类型错误:未定义不是函数
IE - 对象不支持此功能
关于这里发生了什么的任何想法?