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

stimmen
2

Ich habe eine ListKomponente , die Drop-in hat CheckBoxitemEditor, der auch als itemRenderer dient. Es zeigt jedes Element als einfacher CheckBoxmit 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 der Hand 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?

Vielen Dank.

Veröffentlicht am 30/06/2009 um 17:37
quelle vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
2

Hier ist die Lösung , die ich kam mit. Ich änderte meine Liste die Komponente als itemRenderer zu 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 durchzufü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...
        }
    }
}

Mein 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);
        }
    }
}
Beantwortet am 15/07/2009 um 22:15
quelle vom benutzer

stimmen
0

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 offenbar mit dem Gedanken kam, dass die Nutzer wollen würden ihre Kontrollkästchen ein paar Mal wechseln, bevor sie auf den Staat ein Absetzen zu verpflichten, ... 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)]); 
}
Beantwortet am 02/12/2009 um 06:22
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more