Как открыть панель при нажатии кнопки

#extjs #extjs5

#extjs #extjs5

Вопрос:

Я хочу открыть окно панели под кнопкой, которую я нажимаю, которая находится в заголовке. Панель должна отображаться под кнопкой (выровнена по заголовку): я пытаюсь :

 {
            xtype:'button',
            height: '100%',
            text: Strings.Notifications,
            glyph: 'xf142@FontAwesome',
            reference: 'settingsNotificationsButton',
            cls :'headerButtonsCls',
             listeners: {
                    click: function () {
                        new Ext.form.Panel({
                            width: 200,
                            height: 200,
                            title: 'Foo',
                            floating: true,
                            closable: false
                        }).show();
                    }
                }

    }
  

Но приведенный выше код отображает панель в середине экрана как модальную, которая мне не нужна (как я уже сказал, я хочу ее прямо под заголовком)
Итак, как этого добиться?
Спасибо.

Ответ №1:

Я взял ответ Музаффера за основу и добавил функцию для использования здесь координат событий:

  var windowPanel = Ext.create('Ext.Panel', {
     bodyStyle: 'background: #ffff00;',
     border: true,
     height: 200,
     width: 200,
    floating:true
 });
 Ext.create('Ext.Container', {
     renderTo: Ext.getBody(),
     items: [{
             xtype: 'button',
             text: 'Show/Hide Panel',
             handler: function (btn, event) {
                 windowPanel.showAt(event.getXY())
             }
         }
     ]
 });
  

Вот скрипка: https://fiddle.sencha.com/#fiddle/3a8jamp;view/editor

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

1. да, я уже понял это! в функциях обратного вызова необходимо различать событие и целевые параметры, хотя вместо этого я использовал target

Ответ №2:

Это полезно для вас?

 var windowPanel = Ext.create('Ext.Panel', {
     bodyStyle: 'background: #ffff00;',
     border: true,
     height: 200,
     width: 200,
     hidden: true
 });
 Ext.create('Ext.Container', {
     renderTo: Ext.getBody(),
     items: [{
             xtype: 'button',
             text: 'Show/Hide Panel',
             handler: function () {
                 if (windowPanel.isHidden()) {
                     windowPanel.show();
                 } else {
                     windowPanel.hide();
                 }
             }
         },
         windowPanel
     ]
 });
  

https://fiddle.sencha.com/#fiddle/3a8c

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

1. Спасибо, но я надеялся на решение на основе координат щелчка, чтобы панель отображалась под кнопкой заголовка.

2. Вы можете использовать x:150 и y:250 свойства windowPanel объекта. Или лучше, вы можете создать образец скрипки, чтобы прояснить это.

3. Событие щелчка имеет параметр события. docs.sencha.com/extjs/6.5.3/classic /. … В этом событии вы можете вызвать getXY. docs.sencha.com/extjs/6.5.3/classic /. … Вы можете использовать showAt вместо show .