Javascript 如何在ext JS/Sencha中隐藏选项卡面板
我在应用程序中隐藏选项卡面板时遇到问题。 好啊我想知道我在申请表中做了什么。。 请看下图 您可以看到有多个选项卡。 如果用户没有管理员提供的访问权限,我想隐藏它。 我只是简单地使用数组在数组中推tab的面板,如下所示Javascript 如何在ext JS/Sencha中隐藏选项卡面板,javascript,extjs,sencha-touch,sencha-architect,sencha-touch-2.1,Javascript,Extjs,Sencha Touch,Sencha Architect,Sencha Touch 2.1,我在应用程序中隐藏选项卡面板时遇到问题。 好啊我想知道我在申请表中做了什么。。 请看下图 您可以看到有多个选项卡。 如果用户没有管理员提供的访问权限,我想隐藏它。 我只是简单地使用数组在数组中推tab的面板,如下所示 companyManageitems.push(this.Company); companyManageitems.push(this.User); companyManageitems.push(this.ChangePassword); companyManageit
companyManageitems.push(this.Company);
companyManageitems.push(this.User);
companyManageitems.push(this.ChangePassword);
companyManageitems.push(this.Group); //etc
我将这个数组传递给另一个选项卡面板的Items config,如下所示
this.companyManagePanel = new Ext.tab.Panel({
cls: 'p-tab-panel',
activeTab: 0,
items:companyManageitems
});
为了管理选项卡访问功能,我制作了一个函数,该函数返回我传递给该函数的组件,如果用户有权访问该组件,例如更改密码。功能就像
userAccess(this.ChangePassword, 'Change Password');
如果用户没有更改密码的权限,则返回。只需更改密码选项卡,就不会被推入companyManageitems数组,如下所示
companyManageitems.push(userAccess(this.ChangePassword, 'Change Password'));
“更改密码”是权限名称。userAccess()的第二个参数
问题在于:
当用户无权访问该组件/选项卡时,函数返回null。更改其他连续选项卡的索引。所以标签的链接不起作用。
方法
这段代码是我在另一个视图/面板/不工作/打开另一个索引为3的选项卡中编写的
this.manageCompany.companyManagePanel.getLayout().setActiveItem(3);
因此,您要做的是:
this.manageCompany.companyManagePanel.getLayout().setActiveItem(3);
if(this.manageCompany.companyManagePanel.items.indexOf(this.ChangePassword)>-1 && hasUserAccess('Change Password'))
this.manageCompany.companyManagePanel.getLayout().setActiveItem(this.ChangePassword);
确实允许您使用索引,但也允许您使用特定项或itemId
所以,你想做的可能是:
this.manageCompany.companyManagePanel.getLayout().setActiveItem(3);
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'));
意思是,我只需按下数组中的所有选项卡面板companyManageitems[]
按索引隐藏选项卡,如下所示
if (userAccess(this.ChangepasswordPanel, 'Change Password') == null) {
Ext.getCmp('companyTabBar').getTabBar().items.get(3).hide();
}
它正在工作…谢谢你与其隐藏,不如禁用该选项卡,它将简化你的工作?因为我不想向用户显示该选项卡,在禁用选项卡上仍然向用户显示我有其他解决方案。在创建选项卡时,创建一些配置,比如myTabIndex,并根据选项卡层次结构为其分配一些索引。然后在设置活动选项卡项时,使用此配置索引,而不是硬编码选项卡索引。尝试此操作并回复。但使用第二个解决方案代码将变得非常复杂。而且我认为这会降低性能。有三个级别的访问模块,1.超级管理员2.管理员3.用户。我想知道为什么
禁用不起作用。我有一个想法,你为所有的管理员凭证设置一个标志,并在true和false的基础上使用afterrender
。是的,它尝试了Ext.getCmp('companytabar')。gettabar()。items.get(5)。hide();它的锻炼。。