Как я могу вызвать событие itemEditEnd в гибком списке, когда флажок установлен/снят?

StackOverflow https://stackoverflow.com/questions/1064716

Вопрос

у меня есть 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)]); 
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top