有没有办法在制表符切换时重新渲染组件?我有这个数据加载它的所有商店,其中包含特定的权限。每个选项卡只能包含为其视图提供的内容。请参阅下面的屏幕截图:
基本上,这会加载initComponent
。我目前面临的困境是,Backoffice选项卡与Wombat选项卡具有不同的权限。这个想法是当它们中的任何一个包含权限而不是编辑权限(sCreate
)时,只允许该角色显示编辑按钮。 Back Backice有sEcommCreate
而Wombat有sCreate
。当其中任何一个满足true时,它只是将其添加/推送到要在initComponent
期间显示的列。
if (EcommBackoffice.plugin.Security.getAccess(oMe.sCreatePermission)) {
aColumns.push({
header: 'Action',
xtype: 'actioncolumn',
itemId: 'edit-role-btn',
width: 100,
sortable: false,
resizable: false,
draggable: false,
menuDisabled: true,
items: [{
icon: 'resources/img/editpermissions.png',
tooltip: 'Edit Permissions',
scope: oMe
}],
editor: {
xtype: 'text',
name: 'editRow',
cls: 'banks-delete-row'
}
});
}
如何在打开其他选项卡时以及加载时过滤掉显示屏?目前,一旦sCreate
或sEcommCreate
通过其条件,它就会在两个角色上添加按钮,因为这是一个store
。
已经尝试从控制器重新加载数据存储,但它 仅加载数据,而不是将组件重新渲染到其中 添加/删除/显示/隐藏它们。
为了更清楚,如果没有为其分配创建权限,我需要隐藏/删除Action
列。
答案 0 :(得分:0)
actioncolumn
和所有actioncolumn项都有一个函数isDisabled
。我建议使用该功能启用/禁用该项目,例如
items: [{
icon: 'resources/img/editpermissions.png',
tooltip: 'Edit Permissions',
isDisabled:function() {
var isWombatTab = (this.up('tabpanel').getActiveTab().text == 'Wombat');
if(isWombatTab) return EcommBackoffice.plugin.Security.getAccess(oMe.sCreatePermission)
else return EcommBackoffice.plugin.Security.getAccess(oMe.sEcommCreatePermission)
},
scope: oMe
}],
在网格刷新期间将处理 isDisabled()
,因此每当您重新加载商店时,更改都将生效。要强制刷新而不更改商店,您当然可以从标签的grid.refresh()
事件中调用activate
。
然后可以通过CSS隐藏禁用的项目。我不确切知道它将采取什么(也可能取决于你使用的主题),但第一个猜测是
.x-grid-cell-edit-role-btn .x-item-disabled {
visibility:hidden;
}