Как скрыть панель вкладок в ext JS / Sencha
Есть у меня проблема во время скрытия панели вкладок в моем приложении. Хорошо. Я стараюсь, чтобы то, что я делаю в моем приложении.. пожалуйста, смотрите ниже изображение
Вы можете видеть, что есть несколько вкладок. Я хочу скрыть его, если у пользователя нет доступа, предоставленного администратором. Я просто использовал массив, чтобы нажать панель tab в массиве, вот так.
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
});
Для управления функциональностью доступа к вкладкам Я сделал функцию, которая возвращает компонент, который я передал этой функции, если пользователь имеет доступ к этому компоненту для eg. Изменение пароля. Функции типа
userAccess(this.ChangePassword, 'Change Password');
Это возврат, если у пользователя нет разрешения на изменение пароля. и просто измените пароль tab, чтобы не попасть в массив companyManageitems , как это
companyManageitems.push(userAccess(this.ChangePassword, 'Change Password'));
"Изменить пароль" - это имя разрешения. 2-й параметр userAccess()
Проблема в том, что: Когда функция возвращает null, когда пользователь не имеет доступа к этому компоненту/tab tab index получить изменения других последовательных вкладок. так что связывание вкладки не получится. средства этот код я написал в другом представлении / панель / не работает / открыть другие вкладки, которые получают индекс № 3
this.manageCompany.companyManagePanel.getLayout().setActiveItem(3);
3 ответа:
Если вы хотите скрыть элемент вкладки, доступный в
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'));
Означает, просто меня подтолкнуло все tabPanels в массив companyManageitems[] И скрытые вкладки по индексу, как это,
if (userAccess(this.ChangepasswordPanel, 'Change Password') == null) { Ext.getCmp('companyTabBar').getTabBar().items.get(3).hide(); }
Его Работа....Спасибо
Итак, вы делаете следующее:
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);