在切换触摸卡切换时刷新屏幕

时间:2011-11-03 11:50:30

标签: sencha-touch sencha-touch-2

我有一个屏幕,其中formBase包含所有动态创建的UI控件。我正在使用卡布局和视图之间切换。现在碰巧我必须在每次卡切换时执行formBase(我的意思是每次我的屏幕出现)。

我已经使用了beforeshow监听器来实现这一目标。但它不起作用。以下是我的代码。

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');

2 个答案:

答案 0 :(得分:1)

我认为,最好是为它使用“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()
            }
        }
    });

答案 1 :(得分:0)

您应该听取beforecardswitch事件。例如

listeners:{
   beforecardswitch:function(newCard, oldCard, index, animated){
 //do something...
   }
}