2015-09-11 1 views
1

Мы работаем с программным обеспечением, поставляемым третьей стороной, и нам не разрешено изменять его, он может использовать только переопределения.ExtJS 5.0 - добавление кнопки в качестве наложения на компонент

Я хотел бы создать новую кнопку и наложить ее поверх ввода текста, чтобы они были близки друг к другу.

У меня возникли проблемы с выравниванием наложения, вместо этого он отображается вверху слева на экране. Поэтому, конечно, он не соответствует текстовому вводу. Пример кода ниже, в этом случае реализован в представлении initComponent переопределение после вызова this.callParent([]);.

var viewport = Ext.ComponentQuery.query('viewport')[0]; 
var overlay = viewport.add({ 
    xtype: 'panel', 
    fullscreen: true, 
    left: 0, 
    top: 0, 
    width: 120, 
    height: 40, 
    items:[{ 
     xtype: 'button', 
     text: 'Find Address', 
     handler: function() { 
      alert('Got it!'); 
     } 
    }], 
    styleHtmlContent: true 
}); 
var textField = this.query('*[itemId=textField]')[0]; 
overlay.showBy(textField, 'c-c?'); 

Я пробовал использовать floating: true и множество других подходов.

Как только я получу его для правильной установки, есть ли способ правильно отреагировать кнопку на порядок вкладок? То есть, выйдите из текстового поля, затем нажмите кнопку фокуса?

+0

Is стороннее программное обеспечение также ExtJs? Можете ли вы рассказать что-то еще об этом программном обеспечении? – Tarabass

+0

@Tarabass - Да, ExtJS 5.0, постройте выпуск так, чтобы минимальные возможности отладки. –

+0

Затем вы можете получить доступ к исходному коду и найти класс формы? Вы можете создать переопределение? http://docs.sencha.com/extjs/6.0/6.0.0-classic/#!/api/Ext.Class-cfg-override – Tarabass

ответ

1

Как я понимаю из вашего вопроса, у вас возникли проблемы с установкой позиции на компонент. Если это проблема, вы можете установить координату xy. Посмотрите на эту скрипку: https://fiddle.sencha.com/#fiddle/tpl

viewport.down('#idOverlay').setXY([150, 140]); 

Edit:

Ext.define('OverriddenViewport', { 
     override: 'ExampleViewPort', 
     initComponent: function() { 
      // Set up first 
      this.callParent([]); 
      this.add(overlay); 
      this.addListener('afterrender', function(viewport) { 
       viewport.down('#idOverlay').setXY([220,50]); 
       viewport.down('#idButton').addListener('blur', function(button) { 
        viewport.down('#idTextfield').focus(); 
        console.log('textfield is focussed'); 
       }); 
       viewport.down('#idTextfield').addListener('blur', function(button) { 
        viewport.down('#idButton').focus(); 
        console.log('button is focussed'); 
       }); 
      }); 
     } 
    }); 
+0

Скручивание работает нормально, но я получаю ошибки в переопределении initComponent, 'setXY' недоступен. –

+0

Можно ли создать рабочую скрипку? –

+0

Теперь вы можете снова проверить скрипку. Он работает по вашему желанию. –

1

Если вы можете получить доступ к источнику (просто посмотреть вокруг) вы, возможно, может создать переопределение соответствующего класса. Создайте переопределение и скопируйте весь код класса (form?) В свое переопределение.

Вот некоторая дополнительная информация о создании переопределения в ExtJS:
http://moduscreate.com/writing-ext-js-overrides/
https://sencha.guru/2014/12/04/abstract-vs-override/

В переопределении создать trigger (на поле вы хотите расширить) с функциональностью:

{ 
    fieldLabel: 'My Custom Field', 
    triggers: { 
     foo: { 
      cls: 'my-foo-trigger', 
      handler: function() { 
       console.log('foo trigger clicked'); 
      } 
     } 
    } 
}