Мой ответ носит более общий характер и относится к тому, как бы вы добавили функциональность в существующее дополнение. В ember все аддоны (точнее то, что определено в директории /app
аддона) автоматически объединяются в каталог app
приложения-потребителя. Это приводит к тому, что фабрики компонентов регистрируются в реестре контейнеров внедрения зависимостей.
Если у вас есть компонент с тем же именем, что и у аддона, ваш выиграет (т.е. перезапишет запись реестра для component:your-component
.
Таким образом, в классическом макете приложения ember, отличном от pods, вы можете определить your-app/components/power-select
следующим образом:
import PowerSelect from 'ember-power-select/components/power-select';
export default PowerSelect.extend({
init(){
this._super(...arguments);
// do custom stuff
},
onMouseEnter(_, event){
// I've taken this code from how `power-select` already handles events
let action = this.get('onMouseEnter');
if (action) {
action(this.get('publicAPI'), event);
}
}
})
вы получите пользовательскую версию power-select
для своего приложения. Теперь то, что вы хотите сделать с power-select
, особенно сложнее, поскольку вы хотите обрабатывать события изнутри power-select, которые power-select в настоящее время не делегирует своим подкомпонентам .
{{#dropdown.trigger
// You add this line
onMouseEnter=(action "onMouseEnter")
role=(readonly triggerRole)
tagName=(readonly _triggerTagName)
...
tabindex=(readonly tabindex)}}
Это работает, потому что ember-basic-dropdown
уже имеет встроенную поддержку для этого действия. Есть определенный недостаток, заключающийся в невозможности обновления без ручного управления обновлением этого компонента, но, безусловно, позволяет быстро выполнить работу. Если вы выберете такой подход, я бы настоятельно рекомендовал попытаться создать пиар и объединить его вверх по течению.