Sencha Touch: Ext.Map внутри TabPanel
Я совершенно новичок в прикосновении Сенча. Цель состоит в том, чтобы создать приложение, которое имеет панель TabPanel, содержащую четыре вкладки, одна из которых должна быть картой (другие - это NestedList и две панели, работающие как шарм). Я пытался сделать карту карты, как NPApp.views.Mapcard = Ext.extend(Ext.Map, { ... где я в итоге получил действительно странные результаты, как некоторые виды перекрываются, и карта не отображается...
Второй попыткой было создание Panel, вставка ее в 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 ответ
У меня работает похожее приложение. Ваша вкладка идеальна. Все, что вам нужно изменить, это код карты.... Попробуйте вместо этого:
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 Maps или направлениях.
Ура:) саша