2011-07-25 219 views
0

我读过如何做到这一点,但我在实施方面存在缺陷。我想要一个updateComplete事件运行一次,然后删除监听器。删除监听器

这里的组件:

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

这里的处理程序:

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); 
     } 

我缺少什么?我认为这是如何从我在这里阅读的其他帖子做到这一点。

任何提示将不胜感激。

谢谢!

+0

之前和删除事件之后:'跟踪(cb.hasEventListener( 'updateComplete'))',并切换到'cb.removeEventListener( 'updateComplete' ...' –

+0

当我找到它的时候,它说它有监听器,但是对于一些它一直被调用 – fumeng

回答

1

也许它没有作为一个事件监听器放在首位?!但我敢肯定它的工作原理是这样的:

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

试过了,它仍然没有工作,肯定有一些我没有看到,一直在调用updateComplete处理器 – fumeng

+0

等待,我错了,这确实有效,好像你必须通过actionscript添加监听器,以便通过actionscript将其删除。 – fumeng