在ExtJS 4.2

时间:2016-04-27 06:53:44

标签: extjs

有没有办法在制表符切换时重新渲染组件?我有这个数据加载它的所有商店,其中包含特定的权限。每个选项卡只能包含为其视图提供的内容。请参阅下面的屏幕截图:

enter image description here

基本上,这会加载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'
    }
  });

}

如何在打开其他选项卡时以及加载时过滤掉显示屏?目前,一旦sCreatesEcommCreate通过其条件,它就会在两个角色上添加按钮,因为这是一个store

  

已经尝试从控制器重新加载数据存储,但它   仅加载数据,而不是将组件重新渲染到其中   添加/删除/显示/隐藏它们。

为了更清楚,如果没有为其分配创建权限,我需要隐藏/删除Action列。

1 个答案:

答案 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;
}