¿Cómo puedo activar un evento itemEditEnd en una lista Flex cuando la casilla de verificación está activada / desactivada?

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

Pregunta

I tienen un componente List que tiene drop-in CheckBox itemEditor que también sirve como el itemRenderer. Se presenta cada elemento como un simple <=> con una etiqueta.

Sin embargo, el itemEditEnd de sucesos no se disparará hasta que haga clic en algo que está fuera de la lista. Quiero que lanza una vez la casilla de verificación está activada o desactivada.

Yo estaba pensando en el envío manualmente el ListEvent.ITEM_EDIT_END en un controlador de eventos click, pero entonces el itemEditEnd Evento obtendría enviado dos veces. Tiene que haber una mejor manera de hacer esto.

¿Alguna idea?

Gracias.

¿Fue útil?

Solución

Aquí está la solución que se me ocurrió. He cambiado mi lista para utilizar el componente como un itemRenderer solamente , no como un itemRenderer y itemEditor. Luego añade un manejador MouseEvent.CLICK llamar a una función en la lista de la itemRenderer para llevar a cabo las acciones necesarias:

Mi lista de componentes:

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...
        }
    }
}

Mi 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);
        }
    }
}

Otros consejos

acabo de encuentro con esto. Estoy usando un componente personalizado en lugar del enfoque drop-in, y esto funciona cuando se utiliza el procesador como el editor.

Tenga en cuenta que la gente Flex, evidentemente, se le ocurrió la idea de que los usuarios querrían cambiar sus casillas de verificación un par de veces antes de decidirse por el estado que se comprometan a ... momento en el que había dado en la tecla Intro. Cómo obvio!

Mi solución es sintetizar un evento de teclado que es equivalente a oprimir la tecla Enter. La parte difícil es que uno debe utilizar el método callLater () para distribuir el evento debido a que el control de la lista no se han registrado su oyente teclado en el editor hasta después controlador de clic de la casilla de verificación se llama. Aquí está mi gestor de clics la casilla de verificación en mi intérprete personalizado / componente de edición:

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)]); 
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top