Как я могу вызвать событие itemEditEnd в списке Flex, когда CheckBox отмечен / не отмечен?
У меня есть List
компонент, который имеет раскрывающийся CheckBox
itemEditor, который также служит itemRenderer. Он отображает каждый элемент как простой CheckBox
с этикеткой.
Однако событие itemEditEnd не запускается, пока я не нажму на что-нибудь за пределами списка. Я хочу, чтобы он срабатывал после того, как флажок установлен или снят.
Я думал о том, чтобы вручную отправить ListEvent.ITEM_EDIT_END в обработчик событий CLICK, но тогда событие itemEditEnd будет отправлено дважды. Должен быть лучший способ сделать это.
Есть идеи?
Благодарю.
2 ответа
Вот решение, которое я придумал. Я изменил свой список, чтобы использовать компонент только как 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)]);
}