ExtJs не запускал выбранное событие на ComboBox - программирование
Подтвердить что ты не робот

ExtJs не запускал выбранное событие на ComboBox

У меня проблема с ExtJs ComboBox, считаю, что у меня есть ComboBox с 4 элементами и функция обратного вызова в событии select на ComboBox.
Когда я собираюсь установить выбранное значение ComboBox с помощью setValue(), ExtJs не запускает событие select...

Как я могу исправить эту проблему? Я должен запустить это событие после setValue() самостоятельно?

4b9b3361

Ответ 1

Я могу рассказать вам, что сказала поддержка sencha за это год назад:

Ну, событие, по определению, вызывает вызов функции, вызванный пользователем действие, и при вызове select нет действий пользователя.

В любом случае "исправление" легко: вы знаете, что вы вызываете select так сразу после вызывающий select, вы можете вызвать функцию select listener.

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

Вот пример того, как вы можете запускать событие самостоятельно (частично из комментария @JohanHaest)

Чтобы сделать это простым, я говорю, что у вас включен только один выбор.

var record = combo.store.getById(id);
combo.select(id);
combo.fireEvent('select', combo, record);

или

combo.select(model);
combo.fireEvent('select', combo, model);

В текущей версии (4.1.3) имеется возможный Hack при установке второго аргумента метода select на true. Это, в соответствии с исходным кодом, вызовет событие select. Но первый аргумент должен быть экземпляром модели.

// source-snipped
select: function(r, /* private */ assert)

Таким образом, вызов

combo.select(model, true);

будет запускать событие select, но это может измениться в любое время (версия), потому что assert помечен как закрытый

Ответ 2

Я столкнулся с этим, потому что я неправильно использовал valueField в combobox... Я не уверен, что это должно делать, но если вы его неправильно установили, он разбивает combobox - он предотвращает событие change от обстрела вообще и останавливает событие select от стрельбы более одного раза.

Мое предположение заключается в том, что вы можете иметь несколько объектов в списке, которые представляют один и тот же элемент, а значениеField представляет собой ключ, поэтому, если вы неправильно его установили, ключ undefined для всех и, следовательно, один и тот же для всего. Это означает, что после первого набора значение не считается новым значением.

Похоже, что это довольно нишевое поведение (а не то, что я хотел), поэтому я просто убрал его в своем случае, и все стало работать.


Также я думаю, что событие, которое вы хотите, это событие change - документация (для 4.1) говорит

Fires when the value of a field is changed via the setValue method.

тогда как select срабатывает только тогда, когда кто-то нажимает на поле со списком

Совсем немного в стороне, но я также задал вопрос использовать событие для этого - вы знаете, что вы вызвали setValue, так почему бы вам просто не сделать то, что вы хотите, после того, как вы вызовете заданное значение. События имеют тенденцию делать код более запутанным, и если вам не нужна многоадресная рассылка, то обычно лучше не беспокоиться о них.