我的应用程序中包含2个对象:List
和ComboBox
。在List
我有一组项目。单击其中一个项目时,我希望ComboBox's
项目发生更改。到目前为止我有这个代码,但我无法弄清楚从哪里开始。
protected function list_changeHandler(event:IndexChangeEvent):void
{
if(list.selectedItem.stores == "Dodge")
{
//comboBox.?????
}
}
我也有Cold Fusion的数据服务,也是在项目中设置的。我有一个商店列表,Dodge Toyota Hyundai Mazda Nissan Jacksonville
填充List
。当用户选择商店时,Names
数据中有几百ComboBox
个需要过滤。例如,如果我选择Dodge
商店,我希望仅使用商店属性为Dodge
的用户填充组合框。我怎么做?我希望这一切都有道理:)
答案 0 :(得分:1)
我可以想到两种方法来应对这种情况。你采取的方向取决于你的用例(我知道的很少)。
您可以列出可能出现在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();
}
}
注意:这只是我写的最顶尖的代码,所以它可能无法开箱即用,但它传达了这个想法。
每次在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;
}
答案 1 :(得分:0)
尝试更改组合框的数据提供程序,如
protected function list_changeHandler(event:IndexChangeEvent):void
{
if(list.selectedItem.stores == "Dodge")
{
comboBox.dataProvider=array;
//or
comboBox.dataProvider=xmlList;
}
}