2011-07-25 3 views
0

J'ai lu comment faire ceci mais je manque d'implémentation. Je veux qu'un événement updateComplete s'exécute une fois puis supprime l'écouteur.Enlever l'auditeur

est ici le composant:

<mx:ComboBox 
      id="templatesCombo" 
      dataProvider="{lendersModel.fileTemplateComposites}" 
      prompt="Select Template" 
      width="200" 
      labelFunction="getTemplateName" 
      change="onViewTempComboChange(event)" 
      updateComplete="checkTemplatesLength(event);"/> 

Voici le gestionnaire:

private function checkTemplatesLength(event:FlexEvent):void{ 
      if(lendersModel.fileTemplateComposites.length == 1){ 
       this.templatesCombo.selectedIndex = 1; 
       this.currentFileTemplate = templatesCombo.selectedItem as FileTemplateCompositeDTO; 
       this.templateActions_bb.updateButtonVisibility(2, true ); // disable delete button 
      } 
      var cb:ComboBox = ComboBox(event.currentTarget) 
      cb.removeEventListener(FlexEvent.UPDATE_COMPLETE, checkTemplatesLength); 
     } 

Qu'est-ce que je manque? J'ai pensé que c'est comment le faire à partir d'autres postes que j'ai lus ici.

Tous les conseils seront grandement appréciés.

Merci!

+0

avant et après le retrait de l'événement: 'trace (cb.hasEventListener ('updateComplete'))' 'et changer pour cb.removeEventListener ('updateComplete' ...' –

+0

Quand je trace, il dit qu'il a l'écouteur, mais pour certains, il continue à être appelé – fumeng

Répondre

1

peut-être qu'il n'est pas attaché en tant qu'auditeur d'événement en premier lieu ?! mais je suis sûr que cela fonctionne de cette façon:

private var cb:ComboBox; 

private function init():void { 
    cb = // get the right combobox 
    cb.addEventListener(FlexEvent.UPDATE_COMPLETE, checkTemplatesLength); 
} 

private function checkTemplatesLength(event:FlexEvent):void{ 
    if (lendersModel.fileTemplateComposites.length == 1){ 
     this.templatesCombo.selectedIndex = 1; 
     this.currentFileTemplate = templatesCombo.selectedItem as FileTemplateCompositeDTO; 
     this.templateActions_bb.updateButtonVisibility(2, true ); // disable delete button 
    } 
    cb.removeEventListener(FlexEvent.UPDATE_COMPLETE, checkTemplatesLength); 
} 
+0

J'ai essayé cela et ça ne marche toujours pas, il doit y avoir quelque chose que je ne vois pas qui continue à appeler le gestionnaire updateComplete – fumeng

+0

Attendez, Je me trompais, cela fonctionne, il semble que vous deviez ajouter l'écouteur via actionscript afin de le supprimer via actionscript. – fumeng