Sencha Touch: Ext.Map внутри TabPanel - PullRequest
       34

Sencha Touch: Ext.Map внутри TabPanel

2 голосов
/ 12 августа 2011

Я совершенно новичок в сенсорном сенча. Цель состоит в том, чтобы создать приложение с TabPanel, содержащим четыре вкладки, одна из которых должна быть картой (остальные - NestedList и две панели, работающие как шарм). Я пытался сделать карту как NPApp.views.Mapcard = Ext.extend (Ext.Map, {... где я получил действительно странные результаты, например, когда некоторые виды перекрываются и карта не отображается ...

Второй попыткой было создание Панели, вставка ее в TabPanel и добавление карты на панель, где я получаю эту ошибку:

Uncaught TypeError: Невозможно прочитать свойство 'ROADMAP' из неопределенного; Сенча-тактильных debug.js: 24840

Я уже пытался изменить mapType на google.map.MapTypeID, как упомянуто в Google Map API V3, безуспешно.

Я просто не могу это понять, надеюсь, вы можете дать мне несколько советов!

Приложение:

NPApp = new Ext.Application({
    name: "NPApp",
    title: "NextPuff",
    icon: 'images/icon.png',
    tabletStartupScreen: 'images/index_default.jpg',
    phoneStartupScreen: 'images/index_default.jpg',

    launch: function() {
        this.views.viewport = new this.views.Viewport();
        this.views.homecard = this.views.viewport.getComponent('navi');
    }

});

Окно просмотра:

NPApp.views.Viewport = Ext.extend(Ext.TabPanel, {
    fullscreen: true,
    store: NPApp.npstore,


    initComponent: function() {


        Ext.apply(this, {
            tabBar: {
                dock: 'bottom',
                layout: {
                    pack: 'center'
                }
            },
            items: [
                { xtype: 'homecard', stretch: true},
                { xtype: 'searchcard', id: 'navi' },
        { xtype: 'mapcard' },
                { xtype: 'morecard' }
            ]
        });
        NPApp.views.Viewport.superclass.initComponent.apply(this, arguments);
    }
});

Карта:

NPApp.views.Mapcard = Ext.extend(Ext.Panel, {
    title: "Map",
    iconCls: "map",


    initComponent: function() {
        var npMap = new Ext.Map({
            title: 'Map',
            useCurrentLocation: true,
            listeners: {
                centerchange : function(comp, map){
                //    refreshMap(map);
                }
           },
            mapOptions : {
                mapTypeControl : false,
                navigationControl : false,
                streetViewControl : false,
                backgroundColor: 'transparent',
                disableDoubleClickZoom: true,
                zoom: 17,
                draggable: false,
                keyboardShortcuts: false,
                scrollwheel: false
           }
        });
        Ext.apply(this, {
            defaults: {
                styleHtmlContent: true
            },
                items: [npMap]
        });
        NPApp.views.Homecard.superclass.initComponent.apply(this, arguments);
    }
});


Ext.reg('mapcard', NPApp.views.Mapcard);

Сенча 1.1.0; Google JavaScript Maps API V3; Safari 5.1

Спасибо Гюнтер

1 Ответ

2 голосов
/ 27 сентября 2011

У меня работает похожее приложение.Ваша вкладка идеальна.Все, что вам нужно изменить, - это код карты .... Попробуйте вместо этого:

var map = new Ext.Map({
        mapOptions : {
            center : center,
            zoom : 20,
            mapTypeId : google.maps.MapTypeId.HYBRID,
            navigationControl: true,
            navigationControlOptions: {
                    style: google.maps.NavigationControlStyle.DEFAULT
                }
        },

        listeners : {
            maprender : function(comp, map){

                var marker = new google.maps.Marker({
                     position: center,
                     //title : 'Sencha HQ',
                     map: map
                });
                setTimeout( function(){map.panTo (center);} , 1000);
            }

        },

         geo:new Ext.util.GeoLocation({
              autoUpdate:true,
              maximumAge: 0,
              timeout:2000,
              listeners:{
                locationupdate: function(geo) {
                  center = new google.maps.LatLng(geo.latitude, geo.longitude);
                  if (map.rendered)
                    map.update(center)
                  else
                    map.on('activate', map.onUpdate, map, {single: true, data: center});
                },
                 locationerror: function (   geo,
                                            bTimeout, 
                                            bPermissionDenied, 
                                            bLocationUnavailable, 
                                            message) {
                    if(bLocationUnavailable){
                        alert('Your Current Location is Unavailable on this device');
                    }
                    else{
                        alert('Error occurred.');
                    }      
                 }
              }
         })

  });

Это создаст объект карты и установит центр в текущее местоположение.Теперь вам нужно закрепить этот объект внутри объекта Ext.extend (Ext.Panel ({}). Я пытался создать объект карты напрямую, но для него требуется панель для отображения.

Итак, вы код панелидолжно выглядеть примерно так:

NPApp.views.Mapcard = new Ext.extend(Ext.Panel({
        iconCls : 'map',
        title : 'Map',

        layout: 'card',
        ui: 'light',
        items: [map],
        listeners:{
        }            
    });
)

Мне потребовались годы, чтобы пройти через дюжину или более примеров, чтобы заставить работать текущее местоположение. Это комбинация нескольких кодов и куча вещей в API Google.

Позвольте узнать, если у вас есть еще вопросы о Google Картах или направлениях.

Приветствия :) Sasha

...