我有两个相关的ComboBox(大陆和国家)。当大陆ComboBox发生变化时,我从某个URL请求XML。当我收到XML时,我更改了国家ComboBox的DataProvider,如下所示:
public function displayCountryArray( items:XMLList ):void
{
this.resellersCountryLoader.alpha = 0;
this.resellersCountry.dataProvider = items;
this.resellersCountry.dispatchEvent( new ListEvent( ListEvent.CHANGE ) );
}
我调度ListEvent.CHANGE因为我用它来改变另一个ComboBox所以请忽略它(和第一行)。
所以,我的问题是这样的:我从第一大洲选择“ASIA”,然后组合框数据得到更新(我可以看到,因为第一个ITEM是一个标有'23个国家'的项目)。我点击组合然后我可以看到国家。
现在,我选择“非洲”,显示第一个项目,ComboBox关闭,然后当我点击它时,这些国家仍然是来自亚洲的国家。无论如何,如果我单击列表中的项目,那么列表会正确更新,并且它具有正确的信息(正如我所说它影响其他ComboBoxes)。所以唯一的问题是显示列表没有更新。
在这个功能中,我尝试了这些方法
将XMLList转换为XMLCollection甚至是ArrayCollection
添加this.resellersCountry.invalidateDisplayList();
触发DATA_CHANGE和UPDATE_COMPLETE等事件 我知道他们没有多大意义,但我有点绝望。
请注意,当我使用3.0.0 SDK时,这没有发生。
对不起,如果我很蠢,但是弹性事件正在扼杀我。
答案 0 :(得分:11)
设置comboBox'下拉列表的数据提供者似乎解决了这个问题。
this.resellersCountry.dataProvider = items;
this.resellersCountry.dropdown.dataProvider = items;
答案 1 :(得分:1)
this.resellersCountry.dropdown.dataProvider = items;
有效(Flex SDK 3.5)
希望在4.0中修复此错误
答案 2 :(得分:1)
除了克里斯托夫的回答:
当您在ComboBox中使用数据绑定时,您需要使用BindingUtils来设置下拉列表的数据提供者:
MXML:
<mx:ComboBox id="cb_fontFamily"
width="100%"
dataProvider="{ model.fontFamilies }" />
脚本:
private function init():void
{
BindingUtils.bindSetter(updateFontFamilies, model, "fontFamilies");
}
private function updateFontFamilies(fontFamilies:ArrayCollection):void
{
if (cb_fontFamily != null) cb_fontFamily.dropdown.dataProvider = fontFamilies;
}
感谢Christophe指向正确的方向。
答案 3 :(得分:0)
Adobe Community forum post中概述的另一种解决方法是避免将另一个ArrayCollection
对象重新分配给ComboBox,而是重新使用(并重新填充)原始对象:< / p>
items.removeAll();
for each (var item:* in newItems)
{
items.addItem(item);
}