浏览 2281 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-07-20
最后修改:2011-07-20
Flex sdk3.5 ComboBox 的bug
更改ComboBox的数据源,如果变化前后选中条目的label相同,那么下拉列表不会更新。 该现象在flex sdk 3.5中出现,换成flex sdk 3.2无此现象。 附件中含有测试用源码,和使用3.5与3.2编译的swf 附件中的操作方法: 1、 单击按钮,切换数据源, 2、 点击ComboBox 的箭头看一下下拉列表中的数据, 3、 重复1 2 操作,可以发现ComboBox 下拉列表没有变化 4、 选择某项,下拉列表更新。 造成的影响很恶劣: 如果数据源的长度大于1还可以通过切换条目,来更新显示列表; 一旦上一次的数据源长度为1,更新数据源后,长度大于1,但此时虽然能看到下拉列表的长度为新数据源的长度,但是label显示不出,并且无法切换选择条目。 flex 3.2 ComboBox 源码 /** * flex 3.2 ComboBox 源码 * @inheritDoc */ override public function set dataProvider(value:Object):void { selectionChanged = true; super.dataProvider = value; destroyDropdown(); _showingDropdown = false; invalidateProperties(); invalidateSize(); }flex 3.5 ComboBox 源码 /** * flex 3.5 ComboBox 源码 * @inheritDoc */ override public function set dataProvider(value:Object):void { selectionChanged = true; super.dataProvider = value; destroyDropdown(); invalidateProperties(); invalidateSize(); }看了一下源码,还没研究完!依然不知问题出在哪 附件驾到!! [attach]50806[/attach] 原因: ComboBox的下拉列表(_dropdown属性)默认是由 List 实现的,试验了一下List切换数据源,在sdk3.2和sdk3.5下均正常。由此可以推断是ComboBox 弹出 List时出现了问题。 sdk3.2和sdk3.5 的弹出原理相同:_dropdown是每次弹出下拉列表都要新建一个List。 不同的是:发现sdk3.2 的set dataProvider 和updateDisplayList 中调用的 destroyDropdown()方法会执行 PopUpManager.removePopUp(_dropdown); _dropdown = null;而3.5中不会执行移除该操作,造成弹出下拉列表时两个或多个外观不同List的叠加,形成上述bug; 找到了临时解决方案:手动给ComboBox. dropdown设置数据源[/size][/color] cb.dataProvider = b; //_dropdown是每次弹出下拉列表都要重新创建一个,此代码也只能再增加一个弹出List。原来的那个并未移除。 cb.dropdown.dataProvider = b; 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |