如何在 ext JS/ Sencha 中隐藏选项卡面板

How to hide tab panel in ext JS/ Sencha

我在应用程序中隐藏选项卡面板时遇到问题。 行。我尝试在我的应用程序中做什么.. 请看下图

您可以看到有多个选项卡。 如果用户没有管理员提供的访问权限,我想隐藏它。 我只是简单地使用数组将选项卡的面板推送到数组中,就像这样。

 companyManageitems.push(this.Company);
 companyManageitems.push(this.User);
 companyManageitems.push(this.ChangePassword);
 companyManageitems.push(this.Group); //etc

我将这个数组传递给另一个选项卡面板的项目配置,就像这样。

     this.companyManagePanel = new Ext.tab.Panel({
            cls: 'p-tab-panel',
            activeTab: 0,
            items:companyManageitems
           });

为了管理选项卡访问功能,我创建了一个 return 组件,如果用户有权访问该组件,我将其传递给该函数。更改密码。功能就像

userAccess(this.ChangePassword, 'Change Password');

此 return 如果用户没有更改密码的权限。并简单地更改密码选项卡不会被推送到 companyManageitems 数组中,就像这样

 companyManageitems.push(userAccess(this.ChangePassword, 'Change Password'));

'Change Password' 是一个权限名。 userAccess()的第二个参数

问题是: 当用户无权访问该 component/tab 选项卡索引时,函数 return null 会更改其他连续选项卡。所以选项卡的链接不起作用。 方法 我在另一个 view/panel/ 不工作/打开另一个索引号为 3

的标签中编写的代码
this.manageCompany.companyManagePanel.getLayout().setActiveItem(3);

所以,你要做的是:

this.manageCompany.companyManagePanel.getLayout().setActiveItem(3);

SetActiveItem 确实允许您使用索引,但它也允许您使用特定项目或 itemId。

所以,您想要做的可能是:

if(this.manageCompany.companyManagePanel.items.indexOf(this.ChangePassword)>-1 && hasUserAccess('Change Password'))
   this.manageCompany.companyManagePanel.getLayout().setActiveItem(this.ChangePassword);

如果要隐藏 this.Company 处可用的选项卡项和相应的选项卡栏条目,请执行以下操作:

this.Company.hide();
this.Company.tab.hide();

我修改代码如下,

var companyManageitems = [];
        companyManageitems.push(this.companytab);
        companyManageitems.push(this.Usertab);
        companyManageitems.push(this.roletab); 

而不是:

companyManageitems.push(userAccess(this.this.companytab, 'Company'));
companyManageitems.push(userAccess(this.Usertab, 'Users'));
companyManageitems.push(userAccess(tthis.roletab, 'role'));

意思是,我只是将所有 tabPanel 推入数组 companyManageitems[] 像这样按索引隐藏标签,

 if (userAccess(this.ChangepasswordPanel, 'Change Password') == null) {
            Ext.getCmp('companyTabBar').getTabBar().items.get(3).hide();
        }

正在运行....谢谢