我可以想到两种方法来处理这种情况。您选择哪个方向,取决于您的用例(我对此知之甚少)。
全部加载并过滤
您将所有可能出现在 ComboBox 中的项目列成一个大列表。您确保这些项目具有parentId
属性。然后,当用户从列表中选择项目时,您可以使用此属性过滤项目。
private var comboboxItems:ArrayCollection;
override public function initialize():void {
super.initialize();
myService.getAllComboboxItems(setComboboxItems);
}
private function setComboboxItems(event:ResultEvent):void {
combobox.dataprovider = comboboxItems = event.result as ArrayCollection;
comboboxItems.filterFunction = isParentSelected;
}
private function isParentSelected(item:ComboboxItem):Boolean {
return item.parentId = list.selectedItem.id;
}
protected function list_changeHandler(event:IndexChangeEvent):void {
if (list.selectedItem.stores == "Dodge") {
comboboxItems.refresh();
}
}
注意:这只是我正在编写的代码,所以它可能无法开箱即用,但它传达了这个想法。
Load'm when you need'm
每次在 List 中选择一个项目时,进行服务调用以获取相应的 ComboBox 项目,并使用传入的结果设置 dataProvider。
protected function list_changeHandler(event:IndexChangeEvent):void {
if (list.selectedItem.stores == "Dodge") {
service.getComboBoxItemsByParentId(list.selectedItem.id, setComboboxItems);
}
}
private function setComboboxItems(event:ResultEvent):void {
combobox.dataprovider = event.result as ArrayCollection;
}