setactiveitem只能工作一次

时间:2013-12-03 14:34:33

标签: extjs sencha-touch-2

我的问题是我有3个视图文件和一个控制器。

以下是3个按钮点按事件的代码。

onb1:function(){

    Ext.Viewport.remove(Ext.Viewport.getActiveItem(), true);

    Ext.Viewport.add({xtype:'second',height:'30%',style:'background:red'}).show();

},

onb3:function(){

    Ext.Viewport.remove(Ext.Viewport.getActiveItem(), true);

    Ext.Viewport.add({xtype:'main'}).show();

},

onb2:function(){

    Ext.Viewport.remove(Ext.Viewport.getActiveItem(), true);

    Ext.Viewport.add({xtype:'third',height:'60%',style:'background:orange'}).show();

}

它只能工作一次。

告诉我任何解决方案......

2 个答案:

答案 0 :(得分:1)

第一次自动设置activeItem。之后你必须自己设置它。也没有必要调用show()。应该像这样工作:

    Ext.Viewport.add(someView);     
    Ext.Viewport.setActiveItem(someView);

答案 1 :(得分:1)

原因是,这行代码:

Ext.Viewport.remove(Ext.Viewport.getActiveItem(), true);

将删除您的组件,然后销毁它。

也许您必须以一种方式定义处理程序,使它们仅在定义时绑定到这些组件,而不是初始化。

因此,如果您没有在经常添加/删除的组件的initialize方法中声明处理函数。

说您的组件是按钮,因此您的定义文件应如下所示:

Ext.define('mybutton',{
    extend: 'Ext.Button',
    config: {
        text: 'my button'
    },
    initialize: function(){
        var me = this;
        this.addListener({
            fn: me.doSmt,
            event: 'tap'
        });
    }
    doSmt: function(){
        // implement your logics here.......
    }
});