Дополнительный JS Combo. Сохранить развернутым во время фильтрации

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

Я настроил слушателей с фильтром. Фильтр работает нормально.

 this.listeners = {
        beforequery: function(queryPlan){
            me.store.clearFilter(true);
            me.store.filter(filter);
            return true;
        }
    };

Дело в том, что когда я начинаю вводить комбо, иногда оно открывается после ввода первой буквы, а затем сворачивается, даже если есть отфильтрованные значения, которые нужно показать. Мне нужно нажать клавишу вниз, чтобы увидеть отфильтрованный список.

Но если я удаляю символы клавишей Backspace - Он остается открытым - Собственно это то, что мне нужно.

Я понимаю, что есть какой-то трюк с цепочкой событий, но не могу понять, как именно. Ручной вызов combo.expand() не имеет никакого эффекта. Не имеет смысла, если у меня typeAhead=true или нет. Вероятно, это потому, что я использую displayTpl вместо displayField.

Любые идеи ? Заранее спасибо.


person Damask    schedule 22.05.2016    source источник
comment
Это мое решение. Я делаю это в событии BeforeExpand. В этом случае я могу отфильтровать магазин. Но проблема в том, что он не может расширяться после фильтра... Если мне нужен фильтр, мне нужно очистить значение этой комбинации.   -  person Trương Long    schedule 15.03.2019


Ответы (1)


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

combo.getPicker().on(
    'beforehide',
    function() {
        // Your hide logic here
    }
);

Компонент средства выбора списка: Ext.view.Boundlist , поэтому в вашем контроллере должно работать что-то вроде этого:

init: function () {
    this.control({
        'combo[name=myCombo] boundlist': {
            beforehide: this.myHandler
        }
    });
}

Скрипка

person Sergey Novikov    schedule 24.05.2016