如何从initcomponent隐藏工具栏项

时间:2015-10-19 13:01:40

标签: javascript extjs extjs5

我在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开发者工具上。

Extjs版本:5.1

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

您在codesnippet中使用initComponent而不是afterRender。这是对的吗?

我会使用reference-property并像这样使用它:

items: [
    {
        xtype: 'button'
        reference: 'myButton'
    }
]

...

afterRender: function() {
        this.lookupReference('myButton').setHidden(true);
        this.callParent();
    }