2017-03-01 52 views
1

,所以我有一個組合框,應該工作如下:ActionScript 3的過濾項進行組合框

  1. 點擊下拉
  2. 選擇項目
  3. 項目移動到另一個列表
  4. 項目可以不在較長的組合框第一次下拉找到

所以我創建了一個組合框,如:

<s:ComboBox 
      id="cbox" 
      labelFunction="labels" 
      dataProvider="{objects}" 
      change="addFilter()" 
      restrict="a-zA-Z0-9\-,_" 
      width="100%" 
      maxChars="32" 
      prompt="add filter" 
    /> 

我的問題與調用objects.refresh()莖,因爲它在list.as文件(庫)在該行dataGroup.removeEventListener(FlexEvent.UPDATE_COMPLETE, updateCompleteListenerA);,其中dataGroup爲空失敗。在objectsArrayCollection

我的過濾功能是一樣的東西:

private function filterEcus(item:Object):Boolean { 
    for each (var i:Object in secondList) { 
     if (i.property == item.property) { 
      return true; 
     } else { 
      return false; 
     } 
    } 
    //should not reach this 
    return true; 
} 

我所說的刷新在變化處理程序結束。

回答

0

有一個更簡單的解決方案,您的問題。我只是測試它。 首先,你需要聲明你的組合框:

<s:ComboBox id="primaryCombobox" change="updateList(event)"> 
    <s:ArrayList> 
     <fx:Object label="One"/> 
     <fx:Object label="Two"/> 
     <fx:Object label="Three"/> 
     <fx:Object label="Four"/> 
    </s:ArrayList> 
</s:ComboBox> 

<s:ComboBox id="secondaryCombobox"> 
    <s:ArrayList> 
     <!-- You need to declare an empty data provider. --> 
    </s:ArrayList> 
</s:ComboBox> 

然後你使用這個功能的改變處理程序:

private function updateList(event:IndexChangeEvent):void 
{ 
    secondaryCombobox.dataProvider.addItem(primaryCombobox.selectedItem); 
    primaryCombobox.dataProvider.removeItemAt(primaryCombobox.selectedIndex); 
} 
+0

我有同樣的問題,刪除項目不更新組合框,所以我有調用'.refresh()',隨後失敗。 –

+0

儘量不要在DataBinding中使用DataProvider。這就是它爲我工作的方式。您稍後可以在更改事件處理程序中模擬數據綁定。 myCombobox.dataProvider = someArrayList; –

+0

有趣的是,我真的很想回答爲什麼我的數據過濾器導致問題。我刪除了綁定,但仍然無法刷新。 –

相關問題