我遇到了ST2.3的问题。我已经从2.1升级了,我有几个回归现在正常工作。然而,一个肯定似乎被打破的问题是google api周围的Map包装器。我的应用程序在测试和开发模式下工作正常,但只要它为生产而构建,地图就会停止工作。
它似乎打破的代码在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
等...
奇怪的是,这使用了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 - 未捕获的TypeError:undefined不是函数
IE - 对象不支持此功能
关于这里发生了什么的任何想法?
答案 0 :(得分:0)
也许在网络标签上的开发者工具中检查chrome,在生产模式和开发模式之间加载javascript文件有什么不同。
答案 1 :(得分:0)
这是因为你的javascript是在谷歌地图javascript加载之前加载的。因此,当setMapCenter获取该函数时,还没有c(未定义)。你可以做的是使用一些回调,比如“paint”,然后设置你的“setMapCenter”。
<强>更新强>
尝试这样做只是为了测试:
xtype: "map",
listeners: {
activate: function(me, newActiveItem, oldActiveItem, eOpts){
me.config.mapOptions = {
center : new google.maps.LatLng(-42,-42), // your center
zoom : 14,
//others options
}
},
maprender: function(comp, map) {
var me = this;
var map = this.getMap();
// marker test
var position = new google.maps.LatLng(-42, -42);
var marker = new google.maps.Marker({
position: position,
title : 'Hello World',
map: map
});
}
}