extjs 4 动态启用动作列项

Posted

技术标签:

【中文标题】extjs 4 动态启用动作列项【英文标题】:extjs 4 dynamically enable an actioncolumn item 【发布时间】:2012-02-19 16:06:26 【问题描述】:

使用 4.0.6 我有一个带有 actioncolumn 的网格面板,它有两个项目,一个删除按钮和一个查看按钮。删除按钮被禁用,但在某些情况下需要启用它(如果用户是管理员)。所以我试图在代码中启用它。

这是视图:

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()

在视图中我不再收到错误,但该列仍然无法启用。所以我认为这一定与渲染有关,但我对此很陌生,我不知道从哪里开始。

【问题讨论】:

看看是否可以将代码发布到 jsfiddle 中。这是一个例子:jsfiddle.net/dbrin/8f8EC 【参考方案1】:

通常,当 el 未定义时,这意味着您正在尝试在组件呈现之前访问它。你的enableDel 函数什么时候被调用?您可能想尝试将其放入 afterrender 侦听器中。

【讨论】:

我是通过单击按钮调用它,尽管实际上应用程序会在确定用户是否为管理员后调用它。我在 actioncolumn、网格和视口上放置了一个监听器以进行 afterrender,所有这些都在我单击按钮之前很久就被触发了。但是,如果我在任何这些侦听器中调用 enableDel 函数,它就会起作用。所以看起来我最初调用 enableDel 为时已晚——我仍然不完全理解。但是,我认为我可以比我想象的更早地确定用户是否是管理员,即在任何 afterrenders 触发时。

以上是关于extjs 4 动态启用动作列项的主要内容,如果未能解决你的问题,请参考以下文章

Extjs校验配置项

QT中父窗口响应子窗口动作

如何在 ExtJS 4 网格面板中保留垂直滚动条?

在 Swift 4.2 Xcode 10 中使用动作扩展从 Safari 共享 PDF 文件失败

从控制器动态渲染动作 - MVC

静态模型一键动态化,教你如何集成动作捕捉能力