как отличить целевую кнопку назад в ST2?

У меня есть небольшая проблема с Sencha Touch 2:

Мое приложение имеет 2 вида/списка: новости и события. Оба имеют подробные виды. В списке новостей я показываю кнопку фильтра и сортировки, а в списке событий я хочу показать только кнопку фильтра.

Когда я нажимаю на элемент, навигационный контроллер автоматически добавляет кнопку «Назад».

Что я делаю: - когда пользователь нажимает элемент в списке: скрыть все кнопки - когда пользователь нажимает кнопку «Назад»: показывать все кнопки

И вот в чем проблема... Я не могу понять, была ли это кнопка "Назад" в подробном представлении новостей или в подробном представлении событий.

В моем контроллере у меня есть:

"mainnav[id=mainNav]": {
            back: 'showButtons',
        },

когда я пытаюсь:

"panel[id=newsDetail]": {
            back: 'showButtons',
        },

событие не срабатывает. Итак, как я могу узнать, была ли это кнопка возврата новостей или событий?

Спасибо!

Редактировать: это непросто объяснить... вот еще немного информации: "mainNav" - это навигационное представление, а кнопка "Назад" добавляется на его панель инструментов.

Ext.define('MyApp.view.MainNav', {
extend: 'Ext.navigation.View',
alias: 'widget.mainnav',
config: {
    id: 'mainNav',
    maxWidth: '350px',
    items: [
    {
        xtype: 'tabpanel',
        layout : {
            type : 'card'
       },
...
 items: [
       {
        xtype: 'list',
        title: 'News',
        id: 'newsList',
        store: 'newsStore',
        grouped: true,
        onItemDisclosure: true,
...
    {
    xtype: 'list',
    title: 'Events',
    iconCls: 'team',
    id: 'eventList',
    store: 'eventStore',
    onItemDisclosure: true,
...
     tabBar: {
    docked: 'bottom'
}
...
and the navigation bar with its buttons:

navigationBar: {
minWidth: '',
width: '',
id: 'navBar',
layout: {
    align: 'center',
    type: 'hbox'
},
items: [
{
    xtype: 'button',
    id: 'settingsButton',
    align: 'left',
    iconCls: 'settings6',
    iconMask: true
},
    {
    xtype: 'button',
    id: 'filterbutton',
    align: 'right',
    iconCls: 'list',
    iconMask: true
}
]
},

Что я пытаюсь сделать сейчас:

"mainnav[id=mainNav]": {
        back: 'showButtons',
    },

срабатывает, когда пользователь нажимает кнопку «Назад» (не имеет значения, имеет ли он идентификатор в newsDetail или в eventsDetail), но я хочу знать, какое представление видит пользователь после того, как он нажмет кнопку «Назад».

Если он видит список новостей, я хочу показать обе кнопки (фильтр и просмотры), но если он видит список событий, я хочу показать только одну кнопку. Мне нужно что-то вроде:

showButtons: function(component, options) {
  if(Ext.getCmp(backButton).down().getId() == 'newsList'){
    //show 2 buttons
  }else{
    //show one button
  }
}

Извините, если ответ сбивает с толку ... Я не знаю, как я мог бы объяснить это лучше. В любом случае, я был бы признателен за любую помощь/идею!


person Nico    schedule 10.04.2013    source источник
comment
извините за это ... я отредактировал свой предыдущий пост, надеюсь, теперь он лучше ...   -  person Nico    schedule 11.04.2013


Ответы (2)


Панель не имеет обратного события. Так его никогда не уволят.

mainnav - это пользовательский xtype, который вы определили правильно? В противном случае этот селектор также неверен.

person Johan Haest    schedule 11.04.2013

Получил решение:

    var activePanel = Ext.getCmp('MainTabPanel').getActiveItem();
    var activeItem = activePanel.getItemId();

    if(activeItem == 'newsList'){
        this.filterNewsStore();
        Ext.getCmp('showSettingsButton').show();
        Ext.getCmp('filterButton').show();
    }

    if(activeItem == 'eventList'){
        this.filterEventsStore();
        Ext.getCmp('showSettingsButton').hide();
        Ext.getCmp('filterButton').show();
    }

Я вызываю этот код, когда срабатывает кнопка «Назад».

person Nico    schedule 13.04.2013