`
keren
  • 浏览: 1585113 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

flex mx_internal_uid的在数据传递时的重复解决方法

    博客分类:
  • Flex
阅读更多
转:http://aedisju.blogspot.com/2007/04/mxinternaluid.html
    关于这个【mx_internal_uid】的问题,一直抽空想写出来,乘着今天日本那边休息,还是把它给记录下来吧,希望对其他的FLEX爱好者在碰到此类问题的时候有所帮助。

我们首先了解一下【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 风格啦,不要也没关系

恩,这样问题就解决啦。

分享到:
评论
1 楼 herocles 2012-08-08  
你这实际上是一个深复制和浅复制的问题,复制过去的对象失去鼠标是因为本身都是一个对象,也就是都指向同一个内存地址,自然UID就应该相同。

相关推荐

    Flex中如何利用videoPlayer属性和mx_internal命名空间,清除VideoDisplay控件内容

    mx_internal是一个特殊命名空间,它允许开发者访问Flex组件内部的一些非公开属性和方法。使用这个命名空间可以对组件进行更深入的自定义和控制,但需要注意,这种做法可能不被官方支持,且随着版本更新可能会失效。...

    FlexModule_j2ee Flex 与JSP 整合用的.jar 文件

    FlexModule_j2ee的核心是将Flex组件与JSP页面集成,通过这个.jar文件,开发者可以在JSP中引入Flex标签,如`&lt;flex:mx:Application&gt;`等,这些标签能够直接在JSP页面中嵌入Flex组件,使得Flex的应用能够在JSP环境中无缝...

    FLEX_List).rar_flex_flex list_flex li_flex lis_flex list

    在标签中,我们看到`flex_li`和`flex_lis`可能指的是列表项(list item)的样式和布局。Flex允许通过CSS样式来定制列表项的外观,包括字体、颜色、背景、边框等。同时,`flex_list`可能表示对整个列表组件的样式调整...

    flex8_T205注册码

    其测试版本功能与正式版本一致,只是运行时会弹出一个登记窗口。 Chart True DBGrid VSFlexGrid Query SizerOne True DataControl True DBInput True DBList VSSPELL VSVIEW Classic VSVIEW Reporting ...

    S32K3_RTD1.0.0_MCAL4.4_FlexCAN_Example.7z

    S32K3_MCAL_FlexCAN_Example_FIFO_DMA,S32K3_MCAL_FlexCAN_Example_Interrupt,S32K3_MCAL_FlexCAN_Example_Polling

    EmployeeManager.zip_LCDS Flex_flex_flex LC_flex lcds

    本文将以"EmployeeManager.zip_LCDS Flex_flex_flex LC_flex lcds"为例,深入探讨Flex与LCDS在构建基于RIA的应用程序时的关键知识点。 标题"EmployeeManager.zip"暗示这是一个关于员工管理的项目,而"LCDS Flex"则...

    swf.rar_flex_maven 编译flex_maven flex pom_maven flex 编译_swf开发

    标题"swf.rar_flex_maven 编译flex_maven flex pom_maven flex 编译_swf开发"明确指出我们将讨论使用Maven来构建SWF(ShockWave Flash)文件的Flex项目。SWF是Adobe Flash Player播放的文件格式,通常用于在网络...

    dh.rar_flex cool me_flex menu skin_flex 导航_flex4 menu_flex4 menu

    Flex是Adobe公司开发的一种基于ActionScript的开源框架,主要用于构建富互联网应用程序...对于Flex开发者来说,这是一个极好的学习和参考资源,可以深入理解如何在Flex4中创建自定义菜单、皮肤以及数据可视化组件。

    FlexModule_j2ee.zip

    3. **AMF通信**:Flex与J2EE后端进行数据交换时,通常使用Action Message Format(AMF)协议。AMF是一种二进制的序列化格式,用于提高数据传输效率和减少网络开销。它可能涉及到 BlazeDS 或 LCDS(LiveCycle Data ...

    FSH.rar_flex_flex hibernate_flex4_flex4.5_spring3 flex4.5

    在实际操作时,开发者需要理解Flex中的Service调用机制,如何配置Spring的配置文件以暴露服务,以及如何在Hibernate中配置实体类和映射文件。此外,对于数据库的连接池配置、事务管理等企业级开发中的关键点也有深入...

    UserInfoSys.rar_flex_flex strut_flex struts _flex struts2 list_s

    在“UserInfoSys”的标签中,“flex_struts2_list”暗示了系统可能包含了列表展示功能。这通常涉及到Struts2的List类型Result,用于将后台数据集映射为前端的列表组件。在Flex端,这些数据会被渲染成可交互的列表...

    amcharts_flex_components_1.8.3.3

    《深入解析amcharts_flex_components_1.8.3.3:打造卓越的Flex图表体验》 在IT行业中,数据可视化...在深入学习和实践中,开发者可以不断探索amCharts_flex_components的潜力,为各类项目带来更出色的数据展现效果。

    amcharts_flex_components_1.6.2.1.zip_am flex charts_amChartsFB3_

    标题中的"amcharts_flex_components_1.6.2.1.zip"表明这是一个关于amCharts Flex组件的软件包,版本号为1.6.2.1。amCharts是一家知名的图表库供应商,他们提供了用于Adobe Flex的图表组件。Flex是Adobe开发的一种...

    FlexModule_j2ee Flex JAVA

    不要以为我要5分很高,这个绝对是官网资源,其中包含各位最一直在寻找却找不到即使找到也不好用的 flex-bootstrap-jsp.jar flex-bootstrap.jar flex-webtier-jsp.jar flex-webtier.jar

    gis.zip_FLEX GIS_flex_gis java

    在"gis.zip_FLEX GIS_flex_gis_java"这个压缩包中,我们关注的是使用Adobe Flex技术和Java来构建GIS应用的实践方法,特别是实现“鹰眼”功能。 Flex GIS是一种基于Adobe Flex框架开发的GIS应用,它允许开发者创建富...

    flex_style.rar_flex_flex style_style flex

    在"flex_style.rar_flex_flex style_style flex"这个压缩包中,我们可能找到了关于使用Flex样式的实例,这对于初学者理解和掌握Flex布局非常有帮助。 1. **Flex容器与Flex项目**: - Flex容器:任何具有`display: ...

    flex_php_mysql.rar_flex_flex_php_mysql_php mysql_php+mysql_php增删

    标题中的"flex_php_mysql.rar_flex_flex_php_mysql_php+mysql_php增删查改"表明这是一个关于使用Flex作为前端、PHP作为服务器端脚本语言、MySQL作为后台数据库进行数据操作的项目。这个项目的重点在于实现基本的CRUD...

    S32K144_Project_FlexCan_s32k底层开发_S32K144FlexCanCAN_

    标题中的"S32K144_Project_FlexCan_s32k底层开发_S32K144FlexCanCAN"表明这是一个关于S32K144微控制器使用FlexCAN模块进行底层开发的项目。FlexCAN是NXP公司S32K144微控制器上集成的一个通信接口,专门用于实现...

    Forex-Flex-EA.rar_K-Flex Files_flex EA_forex ea_forex flex_forex

    "forex_ea"和"forex_flex_ea"标签进一步强调了这个EA是专门针对外汇市场的。 总的来说,"Forex Flex EA"是一款全面的外汇交易自动化工具,结合了灵活的交易策略和定制化的参数设置,旨在帮助交易者在复杂的市场环境...

    flex教程first_flexapp_tutorial1.

    Flex作为一个强大的开发平台,支持XML-based的MXML语言和面向对象的ActionScript,广泛应用于开发具有动态UI和数据绑定功能的Web应用。 【压缩包子文件的文件名称列表】:fig1.gif、first_flexapp_tutorial1.html、...

Global site tag (gtag.js) - Google Analytics