5

我有两个相关的组合框(大洲和国家)。当大陆 ComboBox 更改时,我从某个 URL 请求 XML。当我收到该 XML 时,我更改了国家组合框的 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 所以请忽略它(和第一行)。

所以,我的问题是这样的:我从第一大洲中选择“亚洲”,然后组合框 DATA 得到更新(我可以看到,因为第一个项目是标签为“23 个国家”的项目)。我点击组合然后我可以看到国家。

现在,我选择“非洲”,显示第一个项目,关闭组合框,然后当我单击它时,国家仍然是来自亚洲的国家。无论如何,如果我单击列表中的某个项目,则列表会正确更新,并且它具有正确的信息(正如我所说的它会影响其他 ComboBoxes )。所以唯一的问题是显示列表没有更新。

在这个函数中,我尝试了这些方法

  • 将 XMLList 转换为 XMLCollection 甚至 ArrayCollection

  • 添加 this.resellersCountry.invalidateDisplayList();

  • 触发像 DATA_CHANGE 和 UPDATE_COMPLETE 这样的事件我知道它们没有多大意义,但我有点绝望。

请注意,当我使用 3.0.0 SDK 时,这并没有发生。

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

4

4 回答 4

11

设置组合框下拉菜单的数据提供者似乎可以解决这个问题。

this.resellersCountry.dataProvider = items;
this.resellersCountry.dropdown.dataProvider = items;
于 2010-04-13T14:35:53.427 回答
1

this.resellersCountry.dropdown.dataProvider = 项目;

工作(Flex SDK 3.5)

希望这个bug在4.0中修复

于 2010-05-06T15:21:31.307 回答
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 指出了正确的方向。

于 2011-04-14T15:28:52.540 回答
0

Adobe 社区论坛帖子中概述的另一种解决方法是避免将不同的ArrayCollection对象重新分配给 ComboBox,而是重新使用(并重新填充)原始对象:

items.removeAll();
for each (var item:* in newItems)
{
    items.addItem(item);
}
于 2014-09-05T11:08:23.403 回答