Cum pot declanșa un eveniment itemEditEnd într-o listă Flex atunci când este bifată caseta de selectare / nebifat?

voturi
2

Am o Listcomponentă care are drop - in CheckBoxitemEditor , care servește , de asemenea , ca itemRenderer. Se afișează fiecare element ca un simplu CheckBoxcu o etichetă.

Cu toate acestea, evenimentul itemEditEnd nu se declanșează până când dau click pe ceva în afara listei. Vreau declanșat o dată bifat caseta de selectare sau neverificată.

Mă gândeam la dispecerizare manual ListEvent.ITEM_EDIT_END într-un handler eveniment clic, dar apoi evenimentul itemEditEnd va primi de două ori expediate. Trebuie să fie o modalitate mai bună de a face acest lucru.

Vreo idee?

Mulțumiri.

Întrebat 30/06/2009 la 17:37
sursa de către utilizator
În alte limbi...                            


2 răspunsuri

voturi
2

Aici este soluția am venit cu. Am schimbat lista mea de a utiliza componenta ca itemRenderer numai , nu ca un itemRenderer și itemEditor. Am adăugat apoi un handler MouseEvent.CLICK pentru a apela o funcție în lista de itemRenderer pentru a efectua acțiunile necesare:

Componenta mea Lista:

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 meu:

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);
        }
    }
}
Publicat 15/07/2009 la 22:15
sursa de către utilizator

voturi
0

Tocmai am rula în asta. Eu folosesc o componentă personalizată, mai degrabă decât abordarea drop-in, iar acest lucru funcționează atunci când se utilizează ca editor de redare.

Rețineți că cei de Flex evident a venit cu ideea că utilizatorii ar dori pentru a comuta între casetele lor de câteva ori înainte de a ajunge pe statul să se angajeze în ... moment în care le-ar lovi tasta Enter. Cât de evident!

Soluția mea este de a sintetiza un eveniment de tastatură care este echivalentă cu apăsarea Enter. Partea mai dificila este faptul că trebuie să se utilizeze metoda callLater () să expedieze evenimentul, deoarece lista de control nu va fi înregistrat ascultător de tastatură în editorul de până după handler clic pe caseta lui se numește. Iată handler meu click pentru caseta din componenta mea de redare / editor personalizat:

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)]); 
}
Publicat 02/12/2009 la 06:22
sursa de către utilizator

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