导航视图上的 Sencha Touch 2 动态按钮

Posted

技术标签:

【中文标题】导航视图上的 Sencha Touch 2 动态按钮【英文标题】:Sencha Touch 2 dynamic button on Navigation View 【发布时间】:2012-09-24 00:54:47 【问题描述】:

我正在尝试从另一个视图动态地对导航视图栏上的按钮 initialize()destroy()。按钮创建得很好,但我无法删除它......也试过hide(),但它被调用了两次并且没有帮助。所以我正式卡住了,请帮忙! :-)

我的控制者:

Ext.define('MyApp.controller.Application', 
    extend: 'Ext.app.Controller',

    config: 
        refs: 
            buttonNew1: '#btn-new1',
            buttonNew2: '#btn-new2',
            buttonNew3: '#btn-new3',
            buttonNew4: '#btn-new4',
            buttonDataNew: '#btn-data-new'
        ,

        control: 
            buttonNew1:  tap: 'onNewButtonTap' ,
            buttonNew2:  tap: 'onNewButtonTap' ,
            buttonNew3:  tap: 'onNewButtonTap' ,
            buttonNew4:  tap: 'onNewButtonTap' ,
            buttonDataNew:  tap: 'onDataNewButtonTap' ,
        
    ,

    onNewButtonTap: function(button) 
        console.log(button);
    ,

    onDataNewButtonTap: function(button) 
        console.log(button);
    
);

我的导航视图:

Ext.define('MyApp.view.Main', 
    extend: 'Ext.navigation.View',
    xtype: 'view-main',

    config: 
        autoDestroy: false,

        items: [
            
                xtype: 'container',
                layout :  type: 'vbox', pack: 'top', align: 'middle' ,

                items: [
                    
                        xtype: 'container',
                        layout: 'hbox',

                        items: [
                            
                                xtype: 'button',
                                id: 'btn-new1',
                                text: 'New1'
                            ,
                            
                                xtype: 'button',
                                id: 'btn-new2',
                                text: 'New2'
                            
                        ]
                    ,
                    
                        xtype: 'container',
                        layout: 'hbox',

                        items: [
                            
                                xtype: 'button',
                                id: 'btn-new3',
                                text: 'New3'
                            ,
                            
                                xtype: 'button',
                                id: 'btn-new4',
                                text: 'New4'
                            
                        ]
                    
                ]
            
        ]
    
);

我的数据视图:

Ext.define("MyApp.view.Data", 
    extend: 'Ext.dataview.DataView',
    xtype: 'view-data',

    config: 
        useComponents: true,
        layout:  type: 'fit', align: 'center' ,
        defaultType: 'view-data-item',
        store: 'MyStore'
    ,

    initialize: function() 
        this.callParent();
        Ext.Viewport.getActiveItem().getNavigationBar().add(Ext.create('Ext.Button', 
            id: 'btn-data-new',
            ui: 'normal',
            iconCls: 'add1',
            align: 'right',
            iconMask: true,
            hideAnimation: Ext.os.is.android
                ? false :  type: 'fadeOut', duration: 200 ,
            showAnimation: Ext.os.is.Android
                ? false :  type: 'fadeIn', duration: 200 
        ));
    ,

    destroy: function() 
        this.callParent();
        var button = Ext.getCmp('btn-data-new');
        if (button) 
            Ext.Viewport.getActiveItem().getNavigationBar().remove(button);
        
    
);

【问题讨论】:

【参考方案1】:

好吧,我终于想通了……问题出在导航视图中的autoDestroy: false

【讨论】:

感谢此代码。你让showAnimationhideAnimation 工作了吗?我的好像不行。

以上是关于导航视图上的 Sencha Touch 2 动态按钮的主要内容,如果未能解决你的问题,请参考以下文章

Sencha Touch 2:如何在导航视图中显示列表?

导航视图 Sencha Touch 2

推送视图导航 Sencha Touch

在 Sencha Touch 2 中使用不同的代理存储动态定义和加载视图

Sencha Touch 2 厨房水槽像导航

使用 store sencha touch 2 将数据加载到 List