Extjs4 extjs 4动态启用actioncolumn项

Extjs4 extjs 4动态启用actioncolumn项,extjs4,gridpanel,Extjs4,Gridpanel,使用4.0.6,我有一个gridpanel,其中有一个actioncolumn,它有两个项,一个delete按钮和view按钮。删除按钮已禁用,但在某些情况下需要启用(如果用户是管理员)。所以我尝试在代码中启用它 以下是观点: Ext.define('PP.view.person.List', { extend: 'Ext.grid.Panel', alias: 'widget.personlist', title: 'Current people', store: 'People', col

使用4.0.6,我有一个gridpanel,其中有一个actioncolumn,它有两个项,一个delete按钮和view按钮。删除按钮已禁用,但在某些情况下需要启用(如果用户是管理员)。所以我尝试在代码中启用它

以下是观点:

Ext.define('PP.view.person.List', {
extend: 'Ext.grid.Panel',
alias: 'widget.personlist', 
title: 'Current people',
store: 'People',
columnLines: true,

initComponent: function () {
    this.columns = [
        { header: 'Id', dataIndex: 'personId', flex: 1, sortable: true },
        { header: 'Title', dataIndex: 'title', flex: 1 },
        { header: 'Name', dataIndex: 'name', flex: 1},
        { xtype:'actioncolumn',
            items:[
                {icon:'cross.gif',disabled:true,handler:function(){alert('delete pressed');}},
                {icon:'tick.gif',handler:function(){alert('view pressed');}}
            ]
        }
    ];

    this.callParent(arguments);
}
}))

以及我用来启用的控制器功能:

enableDel: function () {
    var view = Ext.widget('personlist');
    view.down('actioncolumn').enableAction(0);
}
但是我在开始的那一行的extjs enableAction函数中遇到了一个错误

me.up('tablepanel').el.select
el是未定义的。该列也未启用。有谁能告诉我我做错了什么,或者举一个有效的例子吗?如果我指定

renderTo: Ext.getBody()

在视图中,我再也没有得到错误,但是列仍然没有启用。因此,我认为这一定与渲染有关,但我对这一点非常陌生,我不知道从何处开始。

通常,如果el未定义,则表示您试图在渲染组件之前访问它。什么时候调用
enableDel
函数?您可能希望尝试将其放入
afterrender
侦听器中。

看看是否可以将代码发布到JSFIDLE中。下面是一个例子:我是通过点击按钮来调用它的,但事实上,一旦确定用户是否是管理员,应用程序就会调用它。我在actioncolumn、网格和视口上为afterrender设置了一个侦听器,在我单击按钮之前很久,所有这些都已启动。但是,如果我在任何一个侦听器中调用enableDel函数,它都可以工作。所以看起来我最初调用enableDel太晚了——我仍然不完全理解。然而,我认为我可以计算出用户是否是管理员比我想象的要早得多,也就是说,在任何余火出现的时候。