Wie kann ich auslösen ein itemEditEnd Ereignis in einer Flex-Liste, wenn das Kontrollkästchen aktiviert ist / nicht aktiviert?

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

Frage

Ich habe eine List Komponente, die Drop-in CheckBox itemEditor hat, der auch als itemRenderer dient. Es zeigt jedes Element als einfachen CheckBox mit einem Etikett.

Allerdings ist das itemEditEnd Ereignis nicht ausgelöst werden, bis ich außerhalb der Liste auf etwas klicken. Ich will es dann ausgelöst, wenn das Kontrollkästchen aktiviert ist oder nicht aktiviert.

Ich dachte an Hand den ListEvent.ITEM_EDIT_END in einem Click-Ereignishandler Disposition, aber dann würde das itemEditEnd Ereignis zweimal geschickt bekommen. Es muss ein besserer Weg, dies zu tun.

Irgendwelche Ideen?

Danke.

War es hilfreich?

Lösung

Hier ist die Lösung, die ich kam mit. Ich änderte meine Liste die Komponente als itemRenderer verwenden nur , nicht als itemRenderer und itemEditor. Ich habe dann einen MouseEvent.CLICK Handler eine Funktion in der Liste vom itemRenderer zu nennen, die notwendigen Aktionen ausführen:

Meine Liste Komponente:

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

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

Andere Tipps

Ich habe gerade in diesem Lauf. Ich verwende eine benutzerdefinierte Komponente, anstatt den Drop-in-Ansatz, und das funktioniert, wenn der Renderer als Editor.

Beachten Sie, dass die Flex Leute kamen offenbar mit dem Gedanken auf, dass Benutzer ihre Kontrollkästchen ein paar Mal wechseln wollen würde, über den Zustand, bevor sie sich zu begehen ... an welcher Stelle sie die Enter-Taste getroffen hatte. Wie offensichtlich!

Meine Lösung ist ein Tastatur-Ereignis zu synthetisieren, die zu schlagen Geben Sie entsprechen. Der schwierige Teil ist, dass man den calllater () -Methode verwenden, muss das Ereignis zu versenden, da die Liste Kontrolle seine Tastatur Hörer nicht registriert hat, wird auf dem Editor, bis nach der Klick-Handler Checkbox aufgerufen werden. Hier ist mein Klick-Handler für das Kontrollkästchen in meiner benutzerdefinierten Renderer / Editor-Komponente:

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)]); 
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top