Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在ext JS/Sencha中隐藏选项卡面板_Javascript_Extjs_Sencha Touch_Sencha Architect_Sencha Touch 2.1 - Fatal编程技术网

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

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

我在应用程序中隐藏选项卡面板时遇到问题。 好啊我想知道我在申请表中做了什么。。 请看下图

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

 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();它的锻炼。。