Разметка границ Ext JS: как свернуть область программно?

#javascript #extjs

#javascript #extjs

Вопрос:

У меня есть панель с разметкой «границы», имеющая области «центр» и «север». Я хочу программно свернуть северный регион, и, согласно форуму, способ сделать это:

 container.layout.north.collapse();
  

Однако контейнер.макет — это строковый объект, таким образом, контейнер.layout.north выдает мне нулевой объект.

У кого-нибудь есть 2-секундный указатель на то, как получить дескриптор правильного объекта layout для вызова collapse()?

Ответ №1:

Самым дешевым способом было бы получить доступ к нужной вам панели с помощью вызова Ext.getCmp() . Для вас container.layout не определено, потому что это не объект Ext.Component. Задайте идентификатор для вашей панели границ или любой панели, к которой вам нужен доступ.

  var panel = Ext.getCmp('BorderPanelId');
 panel.layout.north.collapse();
  

Другим способом было бы использовать идентификатор северной панели. В этом случае вы будете:

  var panel = Ext.getCmp('NorthPanelId');
 panel.collapse();
  

Другим способом было бы сделать систему пользовательской ref . Установите свойство ref для ваших панелей. И если у вас есть доступ к владельцу компонента.. вы можете просто использовать ссылку для ссылки на панель или другие компоненты.

Комментарии:

1. панель. макет не равен нулю. он содержит объект типа string. как будто объект layout еще не создан. я на 97,43% уверен, что это как-то связано с тем фактом, что я пытаюсь свернуть () панель, которая еще не показана (она находится в нижней части стека макетов ‘card’).

Ответ №2:

В Extjs 4 вы можете сделать:

 panel.getLayout().regions.north.collapse();
  

Затем для повторной активации области:

 panel.getLayout().regions.north.expand();
  

Ответ №3:

Используя Ext JS 4, вы можете сделать:

 container.down('[region=north]').collapse(); 
  

Это самый простой и рекомендуемый способ.