Hvordan kan jeg utløse en itemEditEnd Event i en Flex List når er merket / ukontrollert?

stemmer
2

Jeg har en Listkomponent som har drop-in CheckBoxitemEditor som også fungerer som itemRenderer. Den viser hvert element som en enkelt CheckBoxmed en etikett.

Imidlertid ikke itemEditEnd hendelse ikke blir utløst før jeg klikker på noe utenfor listen. Jeg vil ha det utløses når er merket eller ukontrollert.

Jeg tenkte på å manuelt sende ut den ListEvent.ITEM_EDIT_END i klikk hendelsesbehandling, men da itemEditEnd hendelse vil bli sendt to ganger. Det må være en bedre måte å gjøre dette.

Noen ideer?

Takk.

Publisert på 30/06/2009 klokken 16:37
kilden bruker
På andre språk...                            


2 svar

stemmer
2

Her er løsningen jeg kom opp med. Jeg endret min liste å bruke komponenten som en itemRenderer bare , ikke som en itemRenderer og itemEditor. Jeg deretter lagt en MouseEvent.CLICK håndterer å kalle en funksjon i listen fra itemRenderer til å utføre de nødvendige handlinger:

Min liste Component:

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

Min 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);
        }
    }
}
Svarte 15/07/2009 kl. 21:15
kilden bruker

stemmer
0

Jeg har nettopp kjørt inn i dette. Jeg bruker en egendefinert komponent i stedet for drop-in tilnærming, og dette fungerer når du bruker renderer som redaktør.

Merk at Flex folk tydeligvis kom opp med forestillingen om at brukerne ønsker å veksle sine boksene et par ganger før settling på staten til å forplikte seg til ... noe som medførte at de ville trykke Enter. Hvordan opplagt!

Min løsning er å syntetisere et tastatur hendelse som tilsvarer trykket på Enter. Den vanskelige delen er at man må bruke callLater () metoden for å sende hendelsen fordi listen kontrollen ikke vil ha registrert sitt tastatur lytteren på redaktøren før etter boksen klikk handler blir kalt. Her er min klikk behandleren for boksen i min egendefinert renderer / redaktør komponent:

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)]); 
}
Svarte 02/12/2009 kl. 05:22
kilden bruker

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