2017-03-01 51 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

有趣的是,我真的很想回答为什么我的数据过滤器导致问题。我删除了绑定,但仍然无法刷新。 –

相关问题