如何从initcomponent中隐藏工具栏项

How do I hide toolbar items from initcomponent

本文关键字:隐藏 工具栏 initcomponent      更新时间:2023-09-26

ExtJs工具栏中有一个按钮,如下图

Ext.define('Member.view.members.MembersGrid', {
   extend: 'Ext.grid.Panel',
   alias: 'widget.membersGrid',
   id: 'membersGrid',
   cls: 'custom-grid', 
   requires: [],
   viewConfig : {
        enableTextSelection: true
   },
   frame: true,
   store: '',
   //id: 'transGrid',
   height: 150,
   columns: [
   {
   xtype: 'rownumberer'
   },
   {
      hidden:true,
      width: 10,
      dataIndex: 'id',
      text: 'id'
   },
   /*{
      width: 100,
      //flex: 1,
      dataIndex: 'member_number',
      text: 'Member Number'
   },*/
   {
      width: 150,
      flex: 1,
      dataIndex: 'member_names',
      text: 'Member Names'
   }],
   dockedItems: [
        {
            xtype: 'toolbar',
            itemId: 'toptoolbar',
            id:'toptoolbar',
            flex: 1,
            dock: 'top',
            items: [
                {
                    xtype: 'button',
                    text: 'Pin_Reset',
                    id: 'pinReset',
                    itemId: 'pinReset',
                    iconCls: 'pin_reset'
                }
            ]
        }
    ],
    initComponent: function() {
     Ext.getCmp('pinReset').hidden = true;
     this.callParent();
    }
});

我想让按钮在渲染后隐藏起来。我想Ext.getCmp('pinReset')。Hidden = true;因为我已经为按钮分配了一个id。在Chrome开发工具上无法设置属性'hidden' of undefined

Extjs Version: 5.1

initComponent在呈现之前被调用。所以它找不到按钮。你可以使用'afterrender'事件来代替。

添加以下代码代替initComponent:

listeners:{
           afterrender: function() {
                               Ext.getCmp('pinReset').hidden = true;
            }
       }
工作代码:

Ext.application({
    name : 'Fiddle',
    launch : function() {
       Ext.create('Ext.grid.Panel', {
   alias: 'widget.membersGrid',
   id: 'membersGrid',
   cls: 'custom-grid', 
           renderTo:Ext.getBody(),
   requires: [],
   viewConfig : {
        enableTextSelection: true
   },
   frame: true,
   store: '',
   //id: 'transGrid',
   height: 150,
   columns: [
   {
   xtype: 'rownumberer'
   },
   {
      hidden:true,
      width: 10,
      dataIndex: 'id',
      text: 'id'
   },
   /*{
      width: 100,
      //flex: 1,
      dataIndex: 'member_number',
      text: 'Member Number'
   },*/
   {
      width: 150,
      flex: 1,
      dataIndex: 'member_names',
      text: 'Member Names'
   }],
   dockedItems: [
        {
            xtype: 'toolbar',
            itemId: 'toptoolbar',
            id:'toptoolbar',
            flex: 1,
            dock: 'top',
            items: [
                {
                    xtype: 'button',
                    text: 'Pin_Reset',
                    id: 'pinReset',
                    itemId: 'pinReset',
                    iconCls: 'pin_reset'
                }
            ]
        }
    ],
           listeners:{
           afterrender: function() {
     Ext.getCmp('pinReset').hidden = true;
    }
       }
});
    }
});
<link rel="stylesheet" href="https://extjs.cachefly.net/ext-4.1.1-gpl/resources/css/ext-all.css">
<script type="text/javascript" src="https://extjs.cachefly.net/ext-4.1.1-gpl/ext-all-debug.js"></script>

你正在使用initComponent而不是afterRender在你的代码片段。对吗?

我将使用reference-属性,并像这样使用它:

items: [
    {
        xtype: 'button'
        reference: 'myButton'
    }
]
...
afterRender: function() {
        this.lookupReference('myButton').setHidden(true);
        this.callParent();
    }