Flex 3.5.0;在dataprovider更改时更新ComboBox显示列表

时间:2010-03-30 14:33:31

标签: flex3 combobox dataprovider displaylist

我有两个相关的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时,这没有发生。

对不起,如果我很蠢,但是弹性事件正在扼杀我。

4 个答案:

答案 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);
}