2007年4月28日星期六
2007年4月27日星期五
mx_internal_uid的在数据传递时的重复解决方法
关于这个【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 风格啦,不要也没关系
恩,这样问题就解决啦。
2007年4月25日星期三
Flex SDK is Opening Source!
剛吃完飯,就去Flex Team逛了一會,發現了個猛報道。Adobe正在準備對Flex SDK開源!OMG!何等得舉動啊?Flex SDK將以Mozilla Public License (MPL)的形式,能讓FlexCoders下載,繼承開發或者上傳代碼。它會讓更多的人參與到Flex的開發來,而且會有更多的FlexComponent和FlexApplication,我們會更加的看到很多象Doug 這樣的“瘋子”。
我們將要看到的開源:
-Component Source(其實已經大部分的開源)
-MXMLC
-FDB
-AS3 Compiler
還是沒有開源:
-Flash Player
-Flex Builder
-LiveCycle Data Services
-Charting Component
Adobe Labs的Flex:Open Source
2007年4月17日星期二
正面面对Microsoft SilverLight(WPF/E)!
首先转一下来自Matrix的新闻:
微软正式发布Flash杀手 命名为SilverLight
matrix 发表于 2007-04-17 08:42:35 作者:Matrix 来源:SilverLight
摘要:
微软日前在美国拉斯维加斯召开的全美广播协会会议上,宣布了其为Windows、Web以及设备上创建富媒体、丰富交互性的战略。并正式将WPF/E命名为Microsoft SilverLight。
SilverLight是Windows PresentATIon Foundation的一个子产品,其利用了跨浏览器Web技术进行设计,以实现多操作系统,甚至是移动设备上的无缝运行。和Flash一样,WPF/E 是作为一个浏览器的插件,可以显示矢量图形、动画和视频。
Silverlight集成了多种现有Web技术和设备,它可以在Windows、Mac平台上运行,支持IE、Firefox,甚至Apple的Safari Web浏览器。而无需对现有的网站设计进行移植,甚至包括利用Adobe
Flash设计的内容。
至于SilverLight与Flash的区别,微软的一位高层人士曾这样描述:一个WPF/E程序“并不是传递给Flash播放器的一个编译好的二进制文件。”相反,所有的代码都是基于标准的,且图像都使用了XAML。
同时,与Flash的内容不方便搜索引擎收录不同,SilverLight是以DOM型式公开它的元素树,内容能很好被搜索引擎收录。
附:SilverLight产品介绍
1、Silverlight通过小巧的浏览器插件将视频、交互性内容以及其他应用融合在一起。该解决方案集成了强大的图像及图层技术,支持任何尺寸图像的无缝整合,并提供适合广播的图层技术,可以在图像上添加按钮、标题或是其他交互性内容。
2、 Silverlight允许利用WMV标准从高清设备向移动设备提供高质量视频和音频。此外,该工具通过Expression
Media Encoder以及Tarari公司的内建平台,支持15X的快速视频编码及硬件加速。
3、Silverlight支持多种平台,使用户能够方便的进行代码重用,并通过不同平台无缝的连接到Web。
4、Silverlight集成了多种现有Web技术和设备,这意味着它可以在任何服务器和发布平台上使用,而无需对现有的网站设计进行移植,甚至包括利用Adobe Flash设计的内容。
5、Silverlight采用了已在.NET 3.0和Vista中使用的XAML语言,这使得Web内容和桌面内容的开发语言一致,从而降低了开发费用。Silverlight还兼容大量其他标准和 现有技术,包括ASP.NET、AJAX以及.NET 3.0,这使得开发者可以根据现有标准,或是采用微软已成熟技术来开发基于Web的内容。
6、 此外,Silverlight为设计者和开发者提供大量的开发工具和开发环境支持。对设计者来说,Expression Design和Expression Blend软件可以创建可重用界面,Expression Web使得在符合W3C标准的网站开发中可以使用XHTML、XML、XSLT、CSS以及ASP.NET等工具。对开发者来说,基于Visual Studio的Web开发支持包括ASP.NET AJAX在内的技术,并支持JavaScript,C#,VB,Ruby以及Python等多种开发语言。
7、 Silverlight浏览器插件的安装程序简单,体积约为2Mb。当用户遇到使用Silverlight开发的网页时,可以迅速的安装这一插件。 Silverlight内建的视频及动画广告解决方案灵活性很高,当传输广播类型的视频或是动画广告时,不会影响视频的质量。而这一问题是现有技术普遍遇到的问题。
8、通过获艾美奖的Windows Media技术,传输流量可降低46%,并且和现有的Windows Media流量配置方案兼容。如果采用下一代Windows Server系统中的IIS媒体包,流量还将进一步下降。
9、Silverlight支持内容接入保护技术。无论在Windows还是Mac平台上,Silverlight都支持多种商业模型,包括订阅、租用、付费浏览或是预览等。