Adobe Flex Combobox DataProvider

时间:2010-06-09 13:35:05

标签: flex combobox dataprovider

我有一个使用Flex 3.2 SDK编译的项目。

我的一个组件是组合框,它与Cairngorm模型中的属性(称为产品)绑定。如果我在model.products中插入一个新值,那么组合框会立即显示新值。效果很好。

然后我转移到3.5 SDK,运行相同的操作会导致问题。即使模型已经更新(我已经证实这肯定是这种情况),组合框也没有正确显示新值 - 它似乎意识到有一个新项目,因为组合中有一个新行,但新行是空白且无法选择的。组合中的现有项目是可选择的(因为它们应该是)。如果我重新初始化表单(即关闭并重新打开组合所在的TitleWindow),则组合中将显示所有正确的值(包括新值)。

我在3.2和3.5之间来回交换了几次,以确认这确实是根本原因。

如何解决这个问题的任何想法将不胜感激。

2 个答案:

答案 0 :(得分:6)

您是在更改dataProvider还是更换它?

我注意到在Flextras AutoCompleteComboBox的Flex 4版本中,ComboBox dataProvider有时会与下拉列表的dataProvider不同步。我认为这是我的错,因为我在向ComboBox添加AutoComplete时所做的更改。

完全有可能在Flex 3.5中添加了此更改;直到我的Flex 4冒险,我才注意到它。

首先,我会尝试在dataProvider更改时使ComboBox无效。您可以通过侦听集合的collectionChange事件来完成此操作。在事件处理程序中只需执行:

myCombo.invalidateProperties()
myCombo.invalidateDisplayList()

如果您正在重新调整dataPRovider,那么您可以尝试覆盖set dataProvider方法并添加如下所示的行:

this.dropdown.dataProvider = value;

是一个奇怪的问题。我相信Flex 3 / 3.2是每次dataPRovider改变时,下拉被关闭[销毁]并重新创建。看来他们在某个时候停止了这样做;这导致了这种异常。

答案 1 :(得分:5)

//this will replace the list base on an update
private var newDropDown:ListBase;

//This addresses a bug in flex 3.5 SDK 
//where the list base does reflect changes to the data provider
//forums.adobe.com/thread/597632  
//bugs.adobe.com/jira/browse/SDK-25705 
//bugs.adobe.com/jira/browse/SDK-25567
override public function set dataProvider(value:Object):void
{
    super.dataProvider = value;
    newDropDown = dropdown;

    if(newDropDown)
    {
        validateSize(true);
        newDropDown.dataProvider = super.dataProvider;
    }
}