Зарегистрировать пользовательское событие в ember-power-select (onmouseEnter, OnMouseLeave) - PullRequest
0 голосов
/ 18 января 2019

Как мне зарегистрировать свое пользовательское событие (onmouseEnter, OnMouseLeave) в Ember-power-select. По умолчанию он поддерживает только: onblur, onchange, onclose, onfocus, oninput, onkeydown, onopen, scrollTo.

1 Ответ

0 голосов
/ 18 января 2019

Мой ответ носит более общий характер и относится к тому, как бы вы добавили функциональность в существующее дополнение. В 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 уже имеет встроенную поддержку для этого действия. Есть определенный недостаток, заключающийся в невозможности обновления без ручного управления обновлением этого компонента, но, безусловно, позволяет быстро выполнить работу. Если вы выберете такой подход, я бы настоятельно рекомендовал попытаться создать пиар и объединить его вверх по течению.

...