Jak mohu spustit itemEditEnd událostí v seznamu Flex, když je CheckBox kontrolována / odškrtnutí?

hlasů
2

Mám Listsložku, která má pokles-in CheckBoxitemEditor které také slouží jako itemRenderer. To zobrazuje jednotlivé položky jako jednoduchá CheckBoxs etiketou.

Nicméně, itemEditEnd Event nedostane spuštěna, dokud jsem kliknout na něco mimo seznam. Chci, aby to vyvolalo jakmile CheckBox je zapsaná a nezapsaná.

Přemýšlel jsem o ručně dispečerské ListEvent.ITEM_EDIT_END v manipulátoru událost click, ale pak itemEditEnd událostí by si odeslány dvakrát. Musí tu být lepší způsob, jak toho dosáhnout.

Nějaké nápady?

Dík.

Položena 30/06/2009 v 17:37
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
2

Zde je řešení, které jsem vymyslel. Změnil jsem seznam používat komponenty jako itemRenderer jediný , ne jako itemRenderer a itemEditor. Pak jsem přidal psovoda MouseEvent.CLICK volání funkce v seznamu z itemRenderer provádět nezbytné kroky:

Můj seznam komponent:

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

My 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);
        }
    }
}
Odpovězeno 15/07/2009 v 22:15
zdroj uživatelem

hlasů
0

Právě jsem běžet do toho. Já používám vlastní součást spíše než přístup drop-in, a to funguje při použití vykreslení jako editor.

Všimněte si, že Flex lidé zřejmě přišli s myšlenkou, že by uživatelé chtějí přepínat zaškrtávací políčka několikrát předtím, než se o aktuálním stavu, aby se zavázaly k ... na kterém místě oni by stiskněte klávesu Enter. Jak jasné!

Moje řešení je syntetizovat událost klávesnice, která je ekvivalentní stisknutím klávesy Enter. Choulostivé části je, že člověk musí použít metodu callLater () odeslat tuto událost, protože ovládací prvek seznamu nebude mít registrován jeho klávesnice posluchače na editoru až po kliknutí handler zaškrtávací políčko je volána. Tady je moje kliknutí handler na políčko v mé vlastní renderer / editor komponenty:

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)]); 
}
Odpovězeno 02/12/2009 v 06:22
zdroj uživatelem

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