我有一个使用Flex 3.2 SDK编译的项目。
我的一个组件是组合框,它与Cairngorm模型中的属性(称为产品)绑定。如果我在model.products中插入一个新值,那么组合框会立即显示新值。效果很好。
然后我转移到3.5 SDK,运行相同的操作会导致问题。即使模型已经更新(我已经证实这肯定是这种情况),组合框也没有正确显示新值 - 它似乎意识到有一个新项目,因为组合中有一个新行,但新行是空白且无法选择的。组合中的现有项目是可选择的(因为它们应该是)。如果我重新初始化表单(即关闭并重新打开组合所在的TitleWindow),则组合中将显示所有正确的值(包括新值)。
我在3.2和3.5之间来回交换了几次,以确认这确实是根本原因。
如何解决这个问题的任何想法将不胜感激。
答案 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;
}
}