2010-08-11 70 views
0

我有两个问题,我的组合框。Flex - ComboBox labelFunction不刷新更新ArrayCollection

我的第一个问题是,当我的ArrayCollection只有一个项目,出于某种原因,我不能选择第一个项目。当我尝试选择一个项目时,mxml上设置的更改函数永远不会被调用。如果我设置了提示符,它会起作用。我知道该项目还没有被选中,因为在调试时,所选项目显示为空。我不想使用提示。我想要自动选择ArrayCollection中的第一项。所以如果只有一个项目,我希望选择的项目是那个。仅供参考 - 我正在使用labelFunction来格式化Array Collection中的数据。任何想法为什么我不能选择第一个项目或将ArrayCollection中的第一个项目设置为选定项目?

我更大的问题是,当我的数组集合得到更新时,我的标签函数不能刷新,因为当我第一次打开下拉菜单时,它具有特定的数据。当Array Collection得到更新并且我再次打开下拉菜单时,我在下拉菜单中看到旧数据,但它不再存在。

假设我有一个ComboBox,其中包含一个状态码的数组集合的数据源,它的状态名称。他们是一个标签功能,在州代码和州名之间加上一个短划线。他们没有任何提示,所以ComboBox看起来像GA - 乔治亚州,当你打开下拉菜单时,那就是所有的东西。我希望自动选择该项目。任何想法为什么在数据收集被新数据更新后打开下拉菜单时显示旧数据?

<mx:ComboBox labelFunction="getFormattedNpaNxxCollectionList()" 
    dataProvider="arrayColl" change="doSomething()"/> 

public function getFormattedNpaNxxCollectionList(item:Object):String 
{ 
    return StringUtil.substitute("{0} - {1}", item.stateCode, item.stateName); 
} 

回答

1

被声明为[Bindable]arrayColl - 更新将不会反映如果自动它不是可绑定。将代码发布到更新集合的位置。

要选择的第一个项目,如果更新阵列采集后有只有一个项目,您可以在更新后调用

if(arrayColl.length == 1) 
    cb.selectedIndex = 0; 

如果您只更新集合中的值(而不是将全新的数组集合对象重新分配到arrayColl),则可以从数组集合的collectionChange事件处理程序执行此操作。否则,您必须在将新收集对象分配给arrayColl变量后执行此操作。

+0

对不起,延迟回复,但我想确保发布这个。我发现它是3.5中的Flex Bug: http://forums.adobe.com/message/2952677 – Dana 2010-08-20 19:13:31