У меня есть Ext.Panel с макетом карты, вложенным в навигационное представление. Я сделал это, чтобы легко переключаться между картой и списком, не делая поп, а затем нажимаю совершенно другое представление (в основном, чтобы избежать анимации). Итак, у меня есть кнопка в навигационной панели, которая запускает действие в контроллере. Это начальное представление со списком, нагрузка прекрасная, но код контроллера для переключения между представлениями (с помощью setActiveItem()) не работает. Нет сообщения об ошибке. Я нашел кое-что о ошибке, где вам нужно вызвать show(). Хотя это и работает, оно накладывает новый activeItem (карта в этом случае) поверх навигационной панели! (см. снимок экрана). Кроме того, если я просто изменяю activeItem на 1 в конфиге обертки вручную, он показывает карту просто отлично, то же самое, что и список.Sencha Touch 2 - setActiveItem макета карты внутри проблемы с навигационным обзором
Моей обертка панели выглядит следующим образом:
Ext.define(ViewInfos.VendorWrapper.ViewName,{
extend: 'Ext.Panel',
id: ViewInfos.VendorWrapper.PanelId,
xtype: ViewInfos.VendorWrapper.Xtype,
config:
{
layout: 'card',
title: Resources.VendorsNearby,
activeItem: 0,
items: [
{
xtype: ViewInfos.VendorList.Xtype, //Initially shown, a list
},
{
xtype: ViewInfos.VendorMap.Xtype, //What I'm trying to show, a map
}
]
}
});
и вот мой код контроллера:
Ext.define('OrderMapper.controller.VendorWrapper', {
extend: 'Ext.app.Controller',
config: {
refs: {
vendorMap: ViewInfos.VendorMap.Xtype,
vendorList: ViewInfos.VendorList.Xtype,
vendorWrapper: ViewInfos.VendorWrapper.Xtype,
main: ViewInfos.Main.Xtype,
vendorToggleButton: (ViewInfos.Main.Xtype + ' button[action=vendorViewToggle]')
},
control: {
vendorToggleButton:{
tap: function(){
var curView = this.getVendorWrapper().getActiveItem().id;
//active view == VendorList
if(curView == 'VendorList'){
//this shows up in the console
console.log('vendorToggleButton tapped, switching to map');
this.getVendorWrapper().setActiveItem(1);
//without this line, the view doesn't even change
this.getVendorWrapper().show();
this.getVendorToggleButton().setText('List');
}
//active view == VendorMap
else if (curView == 'VendorMap'){
console.log('vendorToggleButton tapped, switching to list');
this.getVendorWrapper().setActiveItem(0);
this.getVendorToggleButton().setText('Map');
}
}
}
}
}
А вот скриншот шаткого зрения, что происходит на this.getVendorWrapper().show()
Кроме того, я попробовал сменить обертку на карусель (вместо обычной панели с макетом карты) и на carou sel будет прокручивать, чтобы изменить список/карту, но setActiveItem() STILL не работает.
Кстати, ваш вопрос ответил вам нужно принять правильный ответ нажатия на символе проверки рядом с ответом. это способ поблагодарить парня, который нашел ответ. –