Flex - ComboBox labelFunction不刷新更新ArrayCollection

时间:2010-08-11 01:17:10

标签: flex combobox

我的ComboBox有两个问题。

我的第一个问题是,当我的ArrayCollection只有一个项目时,出于某种原因我无法选择第一个项目。当我尝试选择那个项目时,mxml上设置的更改功能永远不会被调用。如果我设置了提示,它就可以了。我知道该项目尚未被选中,因为在调试时,所选项目显示为null。我不想使用提示。我希望自动选择ArrayCollection中的第一项。因此,如果只有一个项目,我希望所选项目是那样。仅供参考 - 我使用labelFunction格式化Array Collection中的数据。知道为什么我不能选择第一项或将ArrayCollection中的第一项设置为选定项吗?

我的更大问题是,当我的Array Collection更新时,我的标签功能一定不能刷新,因为当我第一次打开下拉列表时,它有特定的数据。当Array Collection更新并再次打开下拉列表时,我会在下拉列表中看到旧数据,但它不再存在。

因此,假设我有一个ComboBox,它具有一个状态代码的数组集合的数据源及其状态名称。它们是一个labelFunction,它在状态代码和状态名称之间放置一个破折号。他们没有提示,所以ComboBox看起来像GA - Georgia,当你打开下拉列表时,就会出现这种情况。我希望自动选择该项目。知道为什么在使用新数据更新数组集合后打开下拉列表时会出现旧数据吗?

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

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

1 个答案:

答案 0 :(得分:1)

arrayColl是否声明为[Bindable] - 如果更新不可绑定,则不会自动反映更新。发布您正在更新集合的代码。

如果在更新数组集合后只有一个项目时选择第一个项目,则可以调用

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

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