Sencha Touch生产构建了Break.Map功能

时间:2014-03-20 16:15:47

标签: sencha-touch sencha-touch-2 sencha-touch-2.3

我遇到了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 - 对象不支持此功能

关于这里发生了什么的任何想法?

2 个答案:

答案 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
        });
    }
}