Производство Sencha Touch строит перерывы в функционале Ext.Map

У меня проблемы с ST2.3. Я обновился с 2.1 и у меня было несколько регрессий, которые теперь работают нормально. Однако одна проблема, которая определенно кажется неработоспособной, - это обертка Map вокруг API Google. Мое приложение отлично работает в режимах тестирования и разработки, но как только оно будет готово к работе, карта перестает работать.

Код, в котором кажется, что он работает, находится внутри кода Map в функции setMapCenter.

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://stackru.com/questions/15041697/sencha-touch-google-map-and-centering-a-marker                
        googleMap.setZoom(17);
        googleMap.panTo(pos);
    }, 500);

Ошибка в следующих браузерах:

Chrome - Uncaught TypeError: undefined не является функцией

IE - объект не поддерживает эту функцию

Есть идеи относительно того, что здесь происходит?

2 ответа

Это потому, что ваш javascript загружается до загрузки javascript google maps. Поэтому, когда setMapCenter получит функцию, еще не существует c (не определено). То, что вы можете сделать, это использовать какой-нибудь обратный вызов, например "нарисованный", а затем установить свой "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
        });
    }
}

Может быть, проверьте в Chrome в инструментах разработчика на вкладке сети, в чем разница в загрузке файлов JavaScript между рабочим режимом и режимом разработки.

Другие вопросы по тегам