为了保障原创作者在本站发表文章的利益, 并维护本站原创的精神, 特声明: RIAShanghai对有以下任何情况之一的文章将不通知作者并直接进行快意删除:
- 非原创, 或者原创但一文多发;
- 各种形式的广告与吹擂;
- 不符合本站文章格式.
欢迎各位读者监督. 谢谢合作. 另: 作为Adobe正式的UG, 我们将把Adobe不定期分发的软件,书籍及各种纪念品赠送给发文活跃的作者, 共同进步.
在基于ListBase进行拖拽以移动对象时, 时常会出现如下错误:![]()
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at mx.controls.listClasses::ListBase/collectionChangeHandler()
[C:\autobuild\3.4.0\frameworks\projects\framework\src\mx\controls\listClasses\ListBase.as:8190]
如下图,
tileListSource - 存放来源对象的容器 - dataProvider为sourceDP : ListCollectionView
tileListTarget - 拖拽的目标容器, 在次Drag后, 仅执行右侧容器的清空操作
因此在鼠标选中所有成员, 鼠标移动到Target上, Drop时, 要执行操作: 将sourceDP清空, 但在清空时, ListCollectionView会派发ListCollectionEvent.REMOVE事件, ListBase会进行响应, 但ListBase在响应时, 有时会无法正常处理, 产生上文所述错误.
Debug时使用callLater与sourceDP.disableAutoUpdate()均不奏效, 最后找到的解决方法:
如下:
1. 首先设置tileListSource.selectedItem = null; // 防止在第二步时报错
2. 设置sourceDP.list = null, 并进行操作
3. 操作结束, 将sourceDP 的list重置为第2步之前的对象.