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 动态启用动作列项的主要内容,如果未能解决你的问题,请参考以下文章