Как я могу вызвать событие 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)]); 
}
Другие вопросы по тегам