Как я могу вызвать событие itemEditEnd в гибком списке, когда флажок установлен/снят?
-
21-08-2019 - |
Вопрос
у меня есть List
компонент, который имеет вставку CheckBox
itemEditor, который также служит itemRenderer.Он отображает каждый элемент в виде простого CheckBox
с этикеткой.
Однако событие itemEditEnd не сработает, пока я не нажму на что-то за пределами списка.Я хочу, чтобы он запускался после установки или снятия флажка CheckBox.
Я думал о ручной отправке ListEvent.ITEM_EDIT_END в обработчике событий CLICK, но тогда событие itemEditEnd будет отправлено дважды.Должен быть лучший способ сделать это.
Есть идеи?
Спасибо.
Решение
Вот решение, которое я придумал.Я изменил свой список, чтобы использовать компонент в качестве itemRenderer. только, а не как itemRenderer и itemEditor.Затем я добавил обработчик MouseEvent.CLICK для вызова функции в списке из itemRenderer для выполнения необходимых действий:
Мой компонент списка:
package
{
import mx.controls.List;
import mx.core.ClassFactory;
public class CustomCheckBoxList extends List
{
public function CustomCheckBoxList()
{
super();
itemRenderer = new ClassFactory(CheckBoxRenderer);
}
public function dispatchSelectionEvent(item:Object, selected:Boolean):void
{
// Take action here...
}
}
}
Мой ItemRenderer:
package
{
import flash.events.MouseEvent;
import mx.controls.CheckBox;
public class CheckBoxRenderer extends CheckBox
{
public function CheckBoxRenderer()
{
super();
}
override protected function clickHandler(event:MouseEvent):void
{
super.clickHandler(event);
CustomCheckBoxList(listData.owner).dispatchSelectionEvent(data, selected);
}
}
}
Другие советы
Я только что столкнулся с этим.Я использую собственный компонент, а не метод «вставной», и это работает при использовании средства рендеринга в качестве редактора.
Обратите внимание, что разработчики Flex, очевидно, пришли к выводу, что пользователи захотят несколько раз переключить свои флажки, прежде чем остановиться на состоянии, которое нужно зафиксировать... и в этот момент они нажмут клавишу Enter.Как очевидно!
Мое решение — синтезировать событие клавиатуры, эквивалентное нажатию Enter.Сложность заключается в том, что для отправки события необходимо использовать метод callLater(), поскольку элемент управления списком не зарегистрирует свой прослушиватель клавиатуры в редакторе до тех пор, пока не будет вызван обработчик щелчка флажка.Вот мой обработчик кликов для флажка в моем пользовательском компоненте рендеринга/редактора:
private function onClick(value:Object):void {
newValue = value;
var list:ListBase = ListBase(owner);
list.callLater(dispatchEvent, [new KeyboardEvent(KeyboardEvent.KEY_DOWN, true, false, Keyboard.ENTER, Keyboard.ENTER)]);
}