mx_internal_uid的在数据传递时的重复解决方法 - 两个datagrid直接拖拽复制数据
2018-01-12 16:55
507 查看
我们首先了解一下【mx_internal_uid】的概念: uid : String---The unique identifier for this object UID 它一共有32位,其中通过 ActionScript's Math.random()来产生24位,后面的8位是current date-time来决定的 ,所以只要不要有中彩票的运气(24位的Math.random(),足球彩票才14场猜0.1.3...),再加上时间不停止,所以它无论如何也是在这 世界上是唯一的 。 当我们对2个DataGrid进行传递信息直接的通信时候,我们会常常这么做: <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"> <mx:Script> <![CDATA[ import mx.utils.UIDUtil; import mx.collections.ArrayCollection; [Bindable] public var dataArr:Array = [{label:"Red", data:"#FF0000"}, {label:"Green", data:"#00FF00"}, {label:"Blue", data:"#0000FF"} ]; [Bindable] public var problemArr:Array = new Array(); private function addFromTopDG():void { problemArr.push(fromDG.selectedItem); //problemArr.push(ObjectUtil.copy(fromDG.selectedItem)); toDG.dataProvider = problemArr; } ]]> </mx:Script> <mx:DataGrid id="fromDG" width="600" height="200" dataProvider="{dataArr}"> <mx:columns> <mx:Array> <mx:DataGridColumn width="300" dataField="mx_internal_uid"/> <mx:DataGridColumn dataField="label"/> <mx:DataGridColumn dataField="data"/> </mx:Array> </mx:columns> </mx:DataGrid> <mx:Button label="Add from Top_DG" click="addFromTopDG()"/> <mx:DataGrid id="toDG" width="600" height="200" dataProvider="{problemArr}"> <mx:columns> <mx:Array> <mx:DataGridColumn width="300" dataField="mx_internal_uid"/> <mx:DataGridColumn dataField="label"/> <mx:DataGridColumn dataField="data"/> </mx:Array> </mx:columns> </mx:DataGrid> </mx:Application> 这时候我们会发现很奇怪的事情发生了,当我们对fromDG数据连续传输到toDG的时候,toDG的数据如果是相同的情况(如很多个Red),我们发现对数据我们用鼠标无法聚焦,仔细一看,原来是【mx_internal_uid】一样呀,从中,我们可以了解以下信息: 1.因为引用关系一直存在,所以传过来的东西是一直一样的。如果把toDG放在一个TitleWindow里传一次再关一次,即削除引用关系,它是没有问题的。 2.就算是ObjectUtil.copy(obj),只要在引用关系还存在的情况下,它copy出来的uid竟然是一样的。那么这样的话Adobe要不要考虑一下重写这个方法呢?毕竟我要的只是里面的值一样而不要把UID一起传过来啊。 解决方法: 合理利用UIDUtil这个类为我们创造合理的UID。 private function addFromTopDG():void { var obj:Object = ObjectUtil.copy(fromDG.selectedItem); obj.mx_internal_uid = UIDUtil.createUID(); //这里千万不要直接fromDG.selectedItem.mx_internal_uid = UIDUtil.createUID(); //因为上面说过这样引用关系还存在。 (toDG.dataProvider as ArrayCollection).addItem(obj); obj = null;//这个就靠自己的CODE 风格啦,不要也没关系 恩,这样问题就解决啦。 |
相关文章推荐
- flex mx_internal_uid的在数据传递时重复的解决方法
- Spring初始化完成后直接执行一个方法,初始化数据(解决方法被重复执行两次的情况)
- 解决mx:AdvancedDataGrid表格中向上滚动导致数据混乱的非主流方法
- 删除数据库中重复数据的两个方法
- 使用SqlBulkCopy对象进行大容量复制数据出现Datardader已经存在的错误的解决方法
- struts中在两个action之间进行传递数据的方法
- DataGrid数据导出excel文件,有时出现乱码解决方法。
- 用一个最简单方法解决asp.net页面刷新导致数据的重复提交
- (转)三种方法解决两个变量数据的交换--Ctamor
- PHP+AJAX传递数据方法一例。并带中文乱码解决方法
- 【转】ArcSDE复制数据时出现ORA-00955名称已由现有对象使用错误的解决方法
- silverlight DataGrid 自定义控件 随鼠标滚动,数据发生更改的错误解决方法
- ArcSDE复制数据时出现ORA-00955名称已由现有对象使用错误的解决方法
- jsp form之间传递数据存在乱码的解决方法
- flex中,用ArrayCollection作为DataGrid的dataProvider,想在ArrayCollection末尾插入数据的解决方法
- 防止刷新重复提交数据解决方法的分析
- 解决刷新页面造成数据重复提交的方法(转载)
- WF 自定义活动开发常见问题(进入第二个流程状态,数据传递失败的解决方法)
- 移除ArrayList内重复数据的两个方法
- DataBind包括三大方法,Repeater,DataList和DataGrid,这些控件都位于 System.Web.UI.WebControls 命名空间中,从 WebControl 基类中直接或间接派生出来的。这些方法都是通过HTML来显示数据的内