2011-07-25 216 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