4

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

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

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

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

任何有关如何解决此问题的想法将不胜感激。

4

2 回答 2

6

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

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

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

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

myCombo.invalidateProperties()
myCombo.invalidateDisplayList()

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

this.dropdown.dataProvider = value;

是个奇怪的问题。我相信在 Flex 3 / 3.2 中,每次 dataPRvider 更改下拉菜单时都会关闭 [destroyed] 并重新创建。似乎他们在某个时候停止了这样做。这导致了这个异常。

于 2010-06-09T13:54:20.663 回答
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;
    }
}
于 2010-06-09T19:57:28.690 回答