Обновление экрана при переключении карты в сенсоре Sencha

У меня есть экран, на котором formBase содержит все динамически создаваемые элементы управления пользовательского интерфейса. Я использую макет карты и переключаюсь между видами. Так получилось, что мне нужно выполнять formBase каждый раз, когда карта переключается (я имею в виду каждый раз, когда появляется мой экран).

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

var formBase = new Ext.form.FormPanel({
        scroll: 'vertical',
        ui: 'round',
        items: [fieldSet, {
            xtype : 'fieldset',
            items : [ item1, item2, item3]
            ]
        }],
         listeners: {
            beforerender: function(ele) {
               console.log(" Screen before render");
               initScreenComps()
            },

            beforeshow: function(ele) {
                console.log(" screen before show");

            }
        }
    });

Изменить: 1

У меня есть файл viewport.js, в котором есть метод изменения области просмотра. вот код Viewport.js ниже. Тем не менее, это не имеет никакого эффекта. Пожалуйста, предложите.

MyApp.views.Viewport = Ext.extend(Ext.Panel, {
    fullscreen: true,
    layout: 'card',
    initComponent: function() {
        Ext.apply(this, {

            items: [
                { xtype: 'MyApp.views.view1', id: 'view1' },
                { xtype: 'MyApp.views.view2', id: 'view2' },
                { xtype: 'MyApp.views.view3', id: 'view3' },
                { xtype: 'MyApp.views.view4', id: 'view4' },
                { xtype: 'MyApp.views.view5', id: 'view5' }             
            ],
        listeners:{
           beforecardswitch:function(newCard, oldCard, index, animated){
                 //do something...
               console.log(" Card switched"  + " New " + newCard + " OLD : " + oldCard + " index + " index);
           }
        }
        }
        );
        MyApp.views.Viewport.superclass.initComponent.apply(this, arguments);
    },

    // used for changing view port of application
    reveal: function(target) {      
        this.setActiveItem(MyApp.views[target],{ type: 'slide', direction: 'right' }
        );
    }
});

И теперь я вызываю view2 из контроллера при нажатии кнопки.

MyApp.views.viewport.reveal('view2');

person Nilanchal    schedule 03.11.2011    source источник


Ответы (2)


Я думаю, что будет лучше, если вы будете использовать для этого прослушиватели событий «beforeactivate» или «activate». Эти события запускаются всякий раз, когда макет карты устанавливает этот элемент как активный. Итак, код будет таким:

var formBase = new Ext.form.FormPanel({
        scroll: 'vertical',
        ui: 'round',
        items: [fieldSet, {
            xtype : 'fieldset',
            items : [ item1, item2, item3]
            ]
        }],
         listeners: {
            beforeactivate: function(panel) {
               console.log(" Screen before render");
               initScreenComps()
            }
        }
    });
person Swar    schedule 03.11.2011
comment
@Swar .. большое спасибо .. beforeactivate работает, когда я использовал внутри Ext.apply .. - person Nilanchal; 04.11.2011

Вместо этого вы должны прослушивать событие beforecardswitch. Например

listeners:{
   beforecardswitch:function(newCard, oldCard, index, animated){
 //do something...
   }
}
person ilija139    schedule 03.11.2011
comment
@ illija139 .. мне нужно использовать этот слушатель для формы? я пробовал, но не повезло. - person Nilanchal; 03.11.2011
comment
Вы должны использовать этот слушатель в объекте, который вы используете для переключения представлений. Например, если вы используете obj.setActiveItem(1);, тогда в конфигурации obj вы должны использовать прослушиватель. Также попробуйте прослушать событие cardswitch. Если оба не работают, вероятно, проблема в том, как вы запускаете компоненты экрана. - person ilija139; 03.11.2011
comment
@ illija139 .. проверьте раздел edit1. Я внес изменения в соответствии с вашим предложением. но не повезло. проверьте один раз, где я ошибаюсь. - person Nilanchal; 03.11.2011
comment
Вот живой пример: jsfiddle.net/p5K4q/35 Как я уже сказал, проверьте, что вы делаете в initScreenComps(); проблема должна быть там. - person ilija139; 03.11.2011