Как скрыть панель вкладок в 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 2

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);