﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-gembin-随笔分类-Flex</title><link>http://www.blogjava.net/gembin/category/33693.html</link><description>&lt;font color="red"&gt;OSGi, Flex, GraniteDS, JSF, Eclipse RCP,XML&lt;br/&gt;
There is nothing that software can't fix. Unfortunately, there is also nothing that software can't completely fuck up. That gap is called talent.&lt;/font&gt;
</description><language>zh-cn</language><lastBuildDate>Sat, 13 Nov 2010 22:22:16 GMT</lastBuildDate><pubDate>Sat, 13 Nov 2010 22:22:16 GMT</pubDate><ttl>60</ttl><item><title>Flex and Deep Linking</title><link>http://www.blogjava.net/gembin/archive/2010/11/12/337913.html</link><dc:creator>gembin</dc:creator><author>gembin</author><pubDate>Fri, 12 Nov 2010 07:06:00 GMT</pubDate><guid>http://www.blogjava.net/gembin/archive/2010/11/12/337913.html</guid><wfw:comment>http://www.blogjava.net/gembin/comments/337913.html</wfw:comment><comments>http://www.blogjava.net/gembin/archive/2010/11/12/337913.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gembin/comments/commentRss/337913.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gembin/services/trackbacks/337913.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/gembin/archive/2010/11/12/337913.html'>阅读全文</a><img src ="http://www.blogjava.net/gembin/aggbug/337913.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gembin/" target="_blank">gembin</a> 2010-11-12 15:06 <a href="http://www.blogjava.net/gembin/archive/2010/11/12/337913.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Using Flex with Scala</title><link>http://www.blogjava.net/gembin/archive/2010/06/25/324394.html</link><dc:creator>gembin</dc:creator><author>gembin</author><pubDate>Fri, 25 Jun 2010 01:51:00 GMT</pubDate><guid>http://www.blogjava.net/gembin/archive/2010/06/25/324394.html</guid><wfw:comment>http://www.blogjava.net/gembin/comments/324394.html</wfw:comment><comments>http://www.blogjava.net/gembin/archive/2010/06/25/324394.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gembin/comments/commentRss/324394.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gembin/services/trackbacks/324394.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Having to write less code to implement a given feature often improves developer productivity: less code means less bugs, less tests to write, and less artifacts to maintain. Just as recent advances in rich-client technologies reduce boilerplate code on the client, new languages targeting the Java Virtual Machine can yield similar benefits on the server. This article illustrates how Flex on the client, combined with Scala on the server, results in a highly effective client-server development mode&nbsp;&nbsp;<a href='http://www.blogjava.net/gembin/archive/2010/06/25/324394.html'>阅读全文</a><img src ="http://www.blogjava.net/gembin/aggbug/324394.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gembin/" target="_blank">gembin</a> 2010-06-25 09:51 <a href="http://www.blogjava.net/gembin/archive/2010/06/25/324394.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Flex 4: change baseColor to chromeColor and useChromeColor=true</title><link>http://www.blogjava.net/gembin/archive/2010/06/18/323834.html</link><dc:creator>gembin</dc:creator><author>gembin</author><pubDate>Fri, 18 Jun 2010 09:30:00 GMT</pubDate><guid>http://www.blogjava.net/gembin/archive/2010/06/18/323834.html</guid><wfw:comment>http://www.blogjava.net/gembin/comments/323834.html</wfw:comment><comments>http://www.blogjava.net/gembin/archive/2010/06/18/323834.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gembin/comments/commentRss/323834.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gembin/services/trackbacks/323834.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/gembin/archive/2010/06/18/323834.html'>阅读全文</a><img src ="http://www.blogjava.net/gembin/aggbug/323834.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gembin/" target="_blank">gembin</a> 2010-06-18 17:30 <a href="http://www.blogjava.net/gembin/archive/2010/06/18/323834.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>视频: 偷窥2 Adobe ROME Adobe Max 2009(COOL!)</title><link>http://www.blogjava.net/gembin/archive/2009/10/12/297992.html</link><dc:creator>gembin</dc:creator><author>gembin</author><pubDate>Mon, 12 Oct 2009 14:26:00 GMT</pubDate><guid>http://www.blogjava.net/gembin/archive/2009/10/12/297992.html</guid><wfw:comment>http://www.blogjava.net/gembin/comments/297992.html</wfw:comment><comments>http://www.blogjava.net/gembin/archive/2009/10/12/297992.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gembin/comments/commentRss/297992.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gembin/services/trackbacks/297992.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 视频: 偷窥2 Adobe ROME Adobe Max 2009!!!!&nbsp;&nbsp;<a href='http://www.blogjava.net/gembin/archive/2009/10/12/297992.html'>阅读全文</a><img src ="http://www.blogjava.net/gembin/aggbug/297992.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gembin/" target="_blank">gembin</a> 2009-10-12 22:26 <a href="http://www.blogjava.net/gembin/archive/2009/10/12/297992.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Adobe ROME Preview(COOL!)</title><link>http://www.blogjava.net/gembin/archive/2009/10/12/297989.html</link><dc:creator>gembin</dc:creator><author>gembin</author><pubDate>Mon, 12 Oct 2009 14:20:00 GMT</pubDate><guid>http://www.blogjava.net/gembin/archive/2009/10/12/297989.html</guid><wfw:comment>http://www.blogjava.net/gembin/comments/297989.html</wfw:comment><comments>http://www.blogjava.net/gembin/archive/2009/10/12/297989.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gembin/comments/commentRss/297989.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gembin/services/trackbacks/297989.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 2万行ActionScript代码打造Adobe ROME!!!&nbsp;&nbsp;<a href='http://www.blogjava.net/gembin/archive/2009/10/12/297989.html'>阅读全文</a><img src ="http://www.blogjava.net/gembin/aggbug/297989.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gembin/" target="_blank">gembin</a> 2009-10-12 22:20 <a href="http://www.blogjava.net/gembin/archive/2009/10/12/297989.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Adobe labs开放FC和FB4的public beta下载</title><link>http://www.blogjava.net/gembin/archive/2009/06/10/281035.html</link><dc:creator>gembin</dc:creator><author>gembin</author><pubDate>Tue, 09 Jun 2009 17:17:00 GMT</pubDate><guid>http://www.blogjava.net/gembin/archive/2009/06/10/281035.html</guid><wfw:comment>http://www.blogjava.net/gembin/comments/281035.html</wfw:comment><comments>http://www.blogjava.net/gembin/archive/2009/06/10/281035.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gembin/comments/commentRss/281035.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gembin/services/trackbacks/281035.html</trackback:ping><description><![CDATA[&nbsp;<br />
<br />
<a target="_blank" href="http://labs.adobe.com/">http://labs.adobe.com</a><br />
<br />
Flash Builder 4安装包将会根据你操作系统的语言配置为英文和简体中文的选择。下面是部分来自Release Notes的翻译。<br />
新增功能：<br />
Flex SDK<br />
<br />
* 引入一个全新的功能强大的组件皮肤框架，叫做Spark。<br />
* 基于Spark框架进行初始化的组件可以与Flex3中的Halo组件集合混合和匹配使用。<br />
* 支持声明化的，动态的MXML图形，以及FXG格式的图形。<br />
* 全新的Spark默认外观，支持全新的样式集合。<br />
* 更强大的布局支持，包括支持MXML图形元素，增强对于翻转和其他变形的支持，支持指定自定义的布局，增强z轴管理。<br />
* 一些新的和增强的特效，包括支持MXML图形元素的动画，通过自定义的动画修改，更多易用的API调用方式，更多的自动化的交互行为。<br />
* 3D特效支持<br />
* Flash动画滤镜，包括Pixel Bender。<br />
* 更多高级字体支持。基于Flash Text 引擎和Text布局框架，也支持CFF（Compact Font Format）。<br />
* 编译器性能提升。<br />
* 新的MXML语言功能，包括MXML 2009命名空间，声明，库和标签定义。<br />
* CSS增强，包括支持命名空间，继承选择器，ID选择器，更多的类选择器和针对组件状态的伪选择器支持。<br />
* 语法增强和状态states增强。<br />
* 方便的数据双向绑定语法。<br />
* ASDoc支持在mxml文件里的组件。<br />
* 增强的HTML模板，基于SWFObject。<br />
* adobe.com存放 SDK运行时共享库RSL。<br />
* 额外的本地化支持，更好的开发本地化应用。<br />
<br />
Flash Builder新功能<br />
<br />
*  一个面向创建数据服务应用的新工作流（包括CF,PHP,Java,WebServices）。<br />
* 支持由Flash Catalyst创建的FXG项目<br />
* 一个全新的Network监控，帮助诊断客户端和服务器段的通讯问题<br />
* Flex 单元测试整合。<br />
* 自动生成getter和setter。<br />
* ASDoc支持在MXML和AS中显示ASDoc注释<br />
* 自定义文件模板支持MXML，AS和CSS文件。<br />
* 自动生成事件处理函数结构。<br />
* 调试器增强。<br />
* Profiler增强。<br />
* Refactoring增强<br />
* 新的Component kit for Flash CS4<br />
* 新支持命令行构建执行方式。<br />
* 导入和应用Flex主题新用户界面。<br />
* 新的Flex类包浏览器替代Flex Navigator面板。
<img src ="http://www.blogjava.net/gembin/aggbug/281035.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gembin/" target="_blank">gembin</a> 2009-06-10 01:17 <a href="http://www.blogjava.net/gembin/archive/2009/06/10/281035.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Google采用FLEX构建虚拟社区Lively [zhuan]</title><link>http://www.blogjava.net/gembin/archive/2008/12/19/247320.html</link><dc:creator>gembin</dc:creator><author>gembin</author><pubDate>Fri, 19 Dec 2008 05:30:00 GMT</pubDate><guid>http://www.blogjava.net/gembin/archive/2008/12/19/247320.html</guid><wfw:comment>http://www.blogjava.net/gembin/comments/247320.html</wfw:comment><comments>http://www.blogjava.net/gembin/archive/2008/12/19/247320.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/gembin/comments/commentRss/247320.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gembin/services/trackbacks/247320.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/gembin/archive/2008/12/19/247320.html'>阅读全文</a><img src ="http://www.blogjava.net/gembin/aggbug/247320.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gembin/" target="_blank">gembin</a> 2008-12-19 13:30 <a href="http://www.blogjava.net/gembin/archive/2008/12/19/247320.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]Example for GraniteDS v1.2.0 OSGi  bundle  </title><link>http://www.blogjava.net/gembin/archive/2008/12/10/245388.html</link><dc:creator>gembin</dc:creator><author>gembin</author><pubDate>Tue, 09 Dec 2008 18:21:00 GMT</pubDate><guid>http://www.blogjava.net/gembin/archive/2008/12/10/245388.html</guid><wfw:comment>http://www.blogjava.net/gembin/comments/245388.html</wfw:comment><comments>http://www.blogjava.net/gembin/archive/2008/12/10/245388.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.blogjava.net/gembin/comments/commentRss/245388.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gembin/services/trackbacks/245388.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Example for GraniteDS v1.2.0 OSGi  bundle  including src and bin&nbsp;&nbsp;<a href='http://www.blogjava.net/gembin/archive/2008/12/10/245388.html'>阅读全文</a><img src ="http://www.blogjava.net/gembin/aggbug/245388.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gembin/" target="_blank">gembin</a> 2008-12-10 02:21 <a href="http://www.blogjava.net/gembin/archive/2008/12/10/245388.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创] Dynamic DataService registration in OSGi Container for Graniteds v1.1.0</title><link>http://www.blogjava.net/gembin/archive/2008/12/04/244374.html</link><dc:creator>gembin</dc:creator><author>gembin</author><pubDate>Thu, 04 Dec 2008 06:51:00 GMT</pubDate><guid>http://www.blogjava.net/gembin/archive/2008/12/04/244374.html</guid><wfw:comment>http://www.blogjava.net/gembin/comments/244374.html</wfw:comment><comments>http://www.blogjava.net/gembin/archive/2008/12/04/244374.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gembin/comments/commentRss/244374.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gembin/services/trackbacks/244374.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Dynamic DataService registration in OSGi Container for Graniteds v1.1.0&nbsp;&nbsp;<a href='http://www.blogjava.net/gembin/archive/2008/12/04/244374.html'>阅读全文</a><img src ="http://www.blogjava.net/gembin/aggbug/244374.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gembin/" target="_blank">gembin</a> 2008-12-04 14:51 <a href="http://www.blogjava.net/gembin/archive/2008/12/04/244374.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创] Adding OSGi support to graniteds v1.1.0</title><link>http://www.blogjava.net/gembin/archive/2008/12/03/244230.html</link><dc:creator>gembin</dc:creator><author>gembin</author><pubDate>Wed, 03 Dec 2008 15:18:00 GMT</pubDate><guid>http://www.blogjava.net/gembin/archive/2008/12/03/244230.html</guid><wfw:comment>http://www.blogjava.net/gembin/comments/244230.html</wfw:comment><comments>http://www.blogjava.net/gembin/archive/2008/12/03/244230.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/gembin/comments/commentRss/244230.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gembin/services/trackbacks/244230.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Adding OSGi support to graniteds v1.1.0.&nbsp;&nbsp;<a href='http://www.blogjava.net/gembin/archive/2008/12/03/244230.html'>阅读全文</a><img src ="http://www.blogjava.net/gembin/aggbug/244230.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gembin/" target="_blank">gembin</a> 2008-12-03 23:18 <a href="http://www.blogjava.net/gembin/archive/2008/12/03/244230.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> Thermo From Adobe Labs </title><link>http://www.blogjava.net/gembin/archive/2008/09/24/230873.html</link><dc:creator>gembin</dc:creator><author>gembin</author><pubDate>Wed, 24 Sep 2008 06:33:00 GMT</pubDate><guid>http://www.blogjava.net/gembin/archive/2008/09/24/230873.html</guid><wfw:comment>http://www.blogjava.net/gembin/comments/230873.html</wfw:comment><comments>http://www.blogjava.net/gembin/archive/2008/09/24/230873.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gembin/comments/commentRss/230873.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gembin/services/trackbacks/230873.html</trackback:ping><description><![CDATA[<h1 class="firstHeading">
Thermo  </h1>
<h3 id="siteSub">
From Adobe Labs  </h3>
<div id="contentSub">
</div>
<!-- start content -->
<a style="width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif);" name="Product_Codename:_.22Thermo.22"></a>
<h2>Product Codename: "Thermo"</h2>
<div class="floatright"><span><a href="http://labs.adobe.com/wiki/index.php/Image:ThermoIcon.png" class="image" title=""><img src="http://wwwimages.adobe.com/labs.adobe.com/cdn/wiki/images/4/4d/ThermoIcon.png" alt="" longdesc="/wiki/index.php/Image:ThermoIcon.png" /></a></span></div>
<p>"Thermo" is an upcoming Adobe product that makes it easy for
designers to create rich Internet application UIs. Thermo allows
designers to build on familiar workflows to visually create working
applications that easily flow into production and development.
</p>
<a style="width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif);" name="Features"></a>
<h3>Features</h3>
<ul>
    <li> Use drawing tools to create original graphics, wireframe an
    application design, or manipulate artwork imported from Adobe Creative
    Suite tools.
    </li>
    <li> Turn artwork from Adobe Photoshop, Illustrator, or Fireworks
    directly into functional components that use the original artwork as a
    &#8220;skin&#8221;.
    </li>
    <li> Define and wire up interactive behavior, such as what to do when a user clicks on something, without having to write code.
    </li>
    <li> Easily design UIs that work with dynamic data, such as a list
    of contacts or product information, without having access to the actual
    data source. Design-time sample data can be used as a realistic
    placeholder when laying out an application, testing interactivity, and
    choreographing motion.
    </li>
</ul>
<p>Applications created in Thermo are Flex applications that can be
loaded directly into Flex Builder, providing a great roundtrip workflow
for designers collaborating with developers. The designer's work can be
incorporated directly into the production application with no loss of
fidelity, and designers can continue to refine the design throughout
the iterative development process.
</p>
<p><em>Check back for more details on Thermo soon!</em>
</p>
<div class="thumb tright">
<div style="width: 182px;"><a href="http://labs.adobe.com/wiki/index.php/Image:ThermoMain.png" class="internal" title="Thermo"><img src="http://wwwimages.adobe.com/labs.adobe.com/cdn/wiki/images/thumb/f/f6/180px-ThermoMain.png" alt="Thermo" longdesc="/wiki/index.php/Image:ThermoMain.png" width="180" height="109" /></a>
<div class="thumbcaption">
<div class="magnify" style="float: right;"><a href="http://labs.adobe.com/wiki/index.php/Image:ThermoMain.png" class="internal" title="Enlarge"><img src="http://labs.adobe.com/wiki/skins/common/images/magnify-clip.png" alt="Enlarge" width="15" height="11" /></a></div>
Thermo</div>
</div>
</div>
<p><br />
</p>
<div class="thumb tright">
<div style="width: 182px;"><a href="http://labs.adobe.com/wiki/index.php/Image:ThermoA.png" class="internal" title="Converting Artwork to Functional Components"><img src="http://wwwimages.adobe.com/labs.adobe.com/cdn/wiki/images/thumb/f/fd/180px-ThermoA.png" alt="Converting Artwork to Functional Components" longdesc="/wiki/index.php/Image:ThermoA.png" width="180" height="134" /></a>
<div class="thumbcaption">
<div class="magnify" style="float: right;"><a href="http://labs.adobe.com/wiki/index.php/Image:ThermoA.png" class="internal" title="Enlarge"><img src="http://labs.adobe.com/wiki/skins/common/images/magnify-clip.png" alt="Enlarge" width="15" height="11" /></a></div>
Converting Artwork to Functional Components</div>
</div>
</div>
<p><br />
</p>
<div class="thumb tright">
<div style="width: 182px;"><a href="http://labs.adobe.com/wiki/index.php/Image:ThermoB.png" class="internal" title="Working with Design Time Sample Data"><img src="http://wwwimages.adobe.com/labs.adobe.com/cdn/wiki/images/thumb/3/39/180px-ThermoB.png" alt="Working with Design Time Sample Data" longdesc="/wiki/index.php/Image:ThermoB.png" width="180" height="93" /></a>
<div class="thumbcaption">
<div class="magnify" style="float: right;"><a href="http://labs.adobe.com/wiki/index.php/Image:ThermoB.png" class="internal" title="Enlarge"><img src="http://labs.adobe.com/wiki/skins/common/images/magnify-clip.png" alt="Enlarge" width="15" height="11" /></a></div>
Working with Design Time Sample Data</div>
</div>
</div>
<p><br />
</p>
<div class="thumb tright">
<div style="width: 182px;"><a href="http://labs.adobe.com/wiki/index.php/Image:ThermoC.png" class="internal" title="Visually Wiring Up Events and Bindings"><img src="http://wwwimages.adobe.com/labs.adobe.com/cdn/wiki/images/thumb/1/17/180px-ThermoC.png" alt="Visually Wiring Up Events and Bindings" longdesc="/wiki/index.php/Image:ThermoC.png" width="180" height="50" /></a>
<div class="thumbcaption">
<div class="magnify" style="float: right;"><a href="http://labs.adobe.com/wiki/index.php/Image:ThermoC.png" class="internal" title="Enlarge"><img src="http://labs.adobe.com/wiki/skins/common/images/magnify-clip.png" alt="Enlarge" width="15" height="11" /></a></div>
Visually Wiring Up Events and Bindings</div>
</div>
</div>
<p><br />
</p>
<div class="thumb tright">
<div style="width: 182px;"><a href="http://labs.adobe.com/wiki/index.php/Image:ThermoD.png" class="internal" title="Drawing Tools to Create Original Artwork or to Manipulate Graphics"><img src="http://wwwimages.adobe.com/labs.adobe.com/cdn/wiki/images/thumb/d/de/180px-ThermoD.png" alt="Drawing Tools to Create Original Artwork or to Manipulate Graphics" longdesc="/wiki/index.php/Image:ThermoD.png" width="180" height="127" /></a>
<div class="thumbcaption">
<div class="magnify" style="float: right;"><a href="http://labs.adobe.com/wiki/index.php/Image:ThermoD.png" class="internal" title="Enlarge"><img src="http://labs.adobe.com/wiki/skins/common/images/magnify-clip.png" alt="Enlarge" width="15" height="11" /></a></div>
Drawing Tools to Create Original Artwork or to Manipulate Graphics</div>
</div>
</div>
<!-- Saved in parser cache with key labswiki:pcache:idhash:2067-1!1!0!1!0!1!0!!en and timestamp 20080924022043 -->
<div class="printfooter">
Retrieved from "<a href="http://labs.adobe.com/wiki/index.php/Thermo">http://labs.adobe.com/wiki/index.php/Thermo</a>"</div>
<img src ="http://www.blogjava.net/gembin/aggbug/230873.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gembin/" target="_blank">gembin</a> 2008-09-24 14:33 <a href="http://www.blogjava.net/gembin/archive/2008/09/24/230873.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MAX2007年会总结十项技术(转)</title><link>http://www.blogjava.net/gembin/archive/2008/09/24/230871.html</link><dc:creator>gembin</dc:creator><author>gembin</author><pubDate>Wed, 24 Sep 2008 06:21:00 GMT</pubDate><guid>http://www.blogjava.net/gembin/archive/2008/09/24/230871.html</guid><wfw:comment>http://www.blogjava.net/gembin/comments/230871.html</wfw:comment><comments>http://www.blogjava.net/gembin/archive/2008/09/24/230871.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gembin/comments/commentRss/230871.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gembin/services/trackbacks/230871.html</trackback:ping><description><![CDATA[<strong>关键字: flex max</strong>
<div class="blog_content">
<p><span style="font-size: small;"><strong><span style="font-family: 宋体;">1. Flex Builder 3/AIR beta2 on lab</span></strong></span></p>
<p><span><span style="font-size: small;"><span style="font-family: 宋体;">这两样东西会在<span> max </span>期间放出<span> beta 2 (M5) </span>应该算是旧闻，还有人事先不知道才是比较奇怪。</span></span></span><span style="font-size: small;"><span style="font-family: 宋体;"><span>beta2 </span><span>本身的新功能在 <span><a href="http://ria.richtechmedia.com/go.php?http://labs.adobe.com/wiki/index.php/Flex_3:Feature_Introductions" title="(120 hits)">wiki</a> </span>上有详细介绍，但重点不外乎在<span> IDE </span>本身的强化、<span>AIR </span>整合、<span>CSS </span>设计与<span> Profiler</span>等。</span></span></span><span><span style="font-size: small;"><span style="font-family: 宋体;">比较重要的是大概有三点</span></span></span><span><span style="font-size: small; font-family: 宋体;">-</span></span><span><span style="font-size: small; font-family: 宋体;">新售价出来了，将来<span> FB </span>分两种版本</span><span><br />
<span style="font-size: small;"><span style="font-family: 宋体;">Standard: $299<br />
Pro: $699</span></span></span></span><span style="font-size: small;"><span style="font-family: 宋体;"><span>Standard </span><span>比现在<span> $499 </span>还降<span>200</span>元，所以现在是流行<span><a href="http://ria.richtechmedia.com/go.php?http://chinese.engadget.com/2007/09/05/apple-cuts-iphone-price-to-399/" title="(179 hits)"><span><span>新版本都要降两百吗</span></span></a></span>？不过没有<span> charting component, </span>这些玩意<span>(</span>包含像<span> AdvancedDataGrid </span>这种<span> visual data component</span>等<span>)</span>都移到<span> Pro </span>版。</span></span></span><span><span style="font-size: small;"><span style="font-family: 宋体;">这样做的意义很明显，主要就是要大幅降低<span> flex </span>的进入门坎，原本要<span>$499 </span>才能有拥有<span> IDE</span>，现在只要<span> $299 </span>几乎是人人买的起，另一方面，对每天靠开发<span> flex </span>为生的人来说，将好料的一次全塞入<span>pro</span>版，而且比现在<span> $799 </span>低了<span> 100</span>元，也算是方便许多，至少付一次钱就可以买到全部的东西<span>(</span>而不用再一样样去付费然后拼起来<span>)</span>，这个市场策略不错。</span></span></span><span><span style="font-size: small; font-family: 宋体;">-Linux </span></span><span><span style="font-size: small; font-family: 宋体;">版问市</span><span><br />
</span><span style="font-size: small;"><span style="font-family: 宋体;">这世界上似乎有很多人一直想在<span> linux </span>上开发<span> flex</span>，而且只用<span> text editor + sdk </span>还不够，一定要有<span> IDE </span>才过瘾，现在可称心如意了，<span>beta</span>版已可在<span> lab </span>上下载。</span></span></span><span><span style="font-size: small; font-family: 宋体;">-flex testing framework </span></span><span><span style="font-size: small; font-family: 宋体;">改为免费</span><span><br />
</span><span style="font-size: small;"><span style="font-family: 宋体;">以往要用<span> Mercury Quicktest Pro </span>来做<span> UI testing </span>时，必需要先装<span> testing framework, </span>但它需要一组<span> FDS </span>的序号才能使用，而几乎没人会愿意花<span> $6,000-$12,000</span>的价钱去买这玩意。</span></span></span><span><span style="font-size: small;"><span style="font-family: 宋体;">两个月前我在玩某个<span>fb3 beta </span>版本时，意外在安装目录下发现居然内建了这个<span> installer</span>，而且还真的可以装也可以用，那时我以为是只是单纯的意外不小心包了进去<span>(</span>或是<span> adobe </span>心想反正卖不掉干脆欢乐大放送<span>)</span>，现在才知道原来这些是故意的啊<span>~</span></span></span></span></p>
<p><span></span></p>
<p><span></span><span style="font-size: small;"><strong></strong></span></p>
<p><span style="font-size: small;"><strong><span style="font-family: 宋体;">2. Thermo</span></strong></span></p>
<span><span style="font-size: small; font-family: 宋体;">粗略简介看</span><span><a href="http://ria.richtechmedia.com/go.php?http://labs.adobe.com/wiki/index.php/Thermo" title="(181 hits)"><span><span><span style="font-size: small; font-family: 宋体;">这里</span></span></span></a></span></span><span style="font-size: small;"><span style="font-family: 宋体;"><span><br />
<img src="http://labs.adobe.com/wiki/images/1/14/ThermoA.png" alt="" /></span></span></span><span style="font-size: small;"><span style="font-family: 宋体;"><span> </span></span></span><span style="font-size: small;"><span style="font-family: 宋体;"><span>
<p><span style="font-size: small;"><span style="font-family: 宋体;"><span>Max </span><span>期间另一个重头戏就是<span> Thermo </span>初亮相，网络上已经有一些影片可看。</span></span></span></p>
<p><span><span style="font-size: small;"><span style="font-family: 宋体;">目前看来它的操作方式很像<span> adobe </span>产品的大合体，我观察到的包含</span></span></span><span style="font-size: small;"><span style="font-family: 宋体;"><span>-</span><span>可直接读入<span> Photoshop PSD </span>档，并且当然保留所有的<span> layer </span>信息与<span> meta info</span></span></span></span><span style="font-size: small;"><span style="font-family: 宋体;"><span>-</span><span>读入的<span> psd </span>档会以<span> tracing image </span>的方式显示在底层<span>(</span>这是跟<span> dreamweaver </span>与<span> golive </span>借来的概念<span>)</span></span></span></span><span style="font-size: small;"><span style="font-family: 宋体;"><span>-</span><span>可用类似<span> edit in place (</span>这是<span> fireworks, image ready, golive </span>时代就有的东西<span>)</span>将画面元素转换为<span> mxml </span>组件，而且会保留<span> style info</span></span></span></span><span><span style="font-size: small; font-family: 宋体;">-</span></span><span><span style="font-size: small; font-family: 宋体;">转换成<span> mxml </span>后会使用新的<span> tag </span>来标识，例如<span> mx:bitmapGraphic </span>与</span><span><br />
<span style="font-size: small;"><span style="font-family: 宋体;">mx:borderSkinFactory</span></span></span></span><span style="font-size: small;"><span style="font-family: 宋体;"><span>-</span><span>可制作多个<span> state </span>并在其间切换<span>(</span>这跟<span> fireworks cs3 </span>里新出现的<span> page </span>面板概念完全一致<span>)</span></span></span></span><span style="font-size: small;"><span style="font-family: 宋体;"><span>-</span><span>拥有<span> timeline </span>可制作<span> transition/effect</span>，例如<span> mouseover </span>时某个对象要渐大或渐小等变化，乍看之下很像是<span> flash </span>附身<span> XD</span></span></span></span><span><span style="font-size: small;"><span style="font-family: 宋体;">整段影片看完初步的感觉如下：</span></span></span><span style="font-size: small;"><span style="font-family: 宋体;"><span>1</span><span>、我至少在<span> thermo </span>里看到<span> photoshop, flash, fireworks, dreamweaver, image ready, golive </span>等软件的功能与影子，这应该可说是合并后<span> 1+1 &gt; 2 </span>的例子之一吧</span></span></span><span style="font-size: small;"><em><span style="font-family: 宋体;">2</span></em><em><span style="font-family: 宋体;">、目前看来工作流程会是这样</span></em></span><span><span style="font-size: small;"><span style="font-family: 宋体;">Photoshop -&gt; Thermo &lt; -&gt; Flex</span></span></span><span><span style="font-family: 宋体;"><span style="font-size: small;">也就是视觉的东西<span> 70% </span>都在<span> photoshop/illustrator </span>里做好，然后将<span> psd </span>丢给<span> thermo </span>做<span> interaction design</span>，但它也同时提供了<span> mxml </span>产生器，让设计师可以将进一步跨界将视觉元素转成可编程的<span> mxml </span>组件，最后交给工程师去<span> coding</span>。</span></span></span><span style="font-size: small;"><em><span style="font-family: 宋体;">3</span></em><em><span style="font-family: 宋体;">、至于<span> thermo </span>实不实用呢？</span></em></span><span><span style="font-size: small;"><span style="font-family: 宋体;">嗯，这要看你怎么定位它。</span></span></span><span><span style="font-size: small;"><span style="font-family: 宋体;">从历史上来看，类似<span> fireworks/image ready </span>这种<span> psd to html </span>产生器的工作流程基本上从来没成功过，因为<span> one-way </span>式的从<span> psd </span>到<span> html </span>或许很容易，但当<span> html </span>要回到<span> psd </span>时，困难度就很高，到最后都是『工人智慧』来解决。</span></span></span><span><span style="font-size: small;"><span style="font-family: 宋体;">但如果从<span> quick-prototyping or Proof of Concept(POC)</span>的角度来看，<span>thermo </span>可能会是很好的帮手，因为设计师可以尽情的发挥视觉设计将美美的版面做出来，然后透过<span> thermo </span>产生可实际操作的<span> flex </span>接口，这样客户可以看的到也摸的到将来实际成品可能的样貌，制作团队也能比较完整的掌握客户想要的东西。</span></span></span><span><span style="font-size: small;"><span style="font-family: 宋体;">至于真正要开始制作<span> flex app</span>时，我想<span> thermo </span>的帮助就不大，因为让不懂程序的设计师来帮忙切<span> ui </span>组件？决定每个<span> module </span>该如何画分？这样冒的风险实在太大，切出来的<span>mxml </span>大概也没法用，最后还是要重新来。</span></span></span><span><span style="font-size: small;"><span style="font-family: 宋体;">但这又带到另一个鸡生蛋、蛋生鸡的老问题。</span></span></span><span style="font-size: small;"><span style="font-family: 宋体;"><span>Thermo </span><span>之
所以会出现，是为了解决工程师不懂如何将视觉画面转换为成品，因此希望由设计师来帮忙这件事，但由设计师来做这件事缺点也很多，上面也已稍微解释，所以这
仍然是一个两难的问题，也就是设计师帮忙切画面，切出来的东西可能工程师觉得不好用或无法用，但由工程师去切画面，可能整支程序画面也就毁了，所以最终下
场差不多。</span></span></span><span><span style="font-size: small; font-family: 宋体;">依我这几年全职开发<span> flash/flex </span>的经验来看，以往许多人提出的</span><span><br />
<span style="font-size: small; font-family: 宋体;">graphic designer - interaction designer - developer </span></span><span style="font-size: small;"><span style="font-family: 宋体;">三级分工制只能算是第一步，<span>thermo </span>的出现可能可以实质帮到<span> interaction designer </span>的忙，但<span> interaction designer </span>到<span> developer </span>这段仍然会是断层，而解决之道，则是要找到一个方式将这<span> missing link </span>给补起来，这也将是<span> thermo </span>成败的最大关键<span>(</span>目前看来，<span>blend/expression/xaml </span>的尝试不甚成功，希望<span> adobe</span>可以另觅它途让人眼睛一亮啊<span>)</span></span></span></span></p>
</span></span></span>
<p><span></span></p>
<p><span></span><span style="font-size: small;"><strong></strong></span></p>
<p><span style="font-size: small;"><strong><span style="font-family: 宋体;">3. Flash Player 10 (codename Astro) </span></strong></span></p>
<p><span style="font-size: small;"><span style="font-family: 宋体;"><span>FP9 </span><span>从<span> as2 </span>发展到<span> as3 </span>可说是<span> flash </span>十年来最惊人的大跃进，几乎完全改写了<span> RIA </span>的历史，原本以为大概很难再看到同样<span> level </span>的改版，但很显然我错了。</span></span></span><span style="font-size: small;"><span style="font-family: 宋体;"><span>FP10 </span><span>新增的几个重点功能大略包含</span></span></span><span style="font-size: small;"><span style="font-family: 宋体;"><span>-</span><span>简易的<span> hardware 3D support</span>：看来原本打死不愿意为<span> fp </span>加入<span>3d</span>功能的<span> engineering team </span>还是很顺应民情啊，当然目前看到的<span> 3d </span>功能还非常有限，有人称它为<span> 2.5D</span>，也有人称为<span> card-game style 3D</span>，不过就我对<span> flash player team </span>的了解，将来内建的<span> 3D </span>功能追上<span> Papervision3D </span>应该是没问题的。</span></span></span><span style="font-size: small;"><span style="font-family: 宋体;"><span>-advanced text layout: </span><span>这包含了<span> multi-column </span>的走文方式，也包含了<span> right-to-left layout(RTL)</span>，这两件事在过去我们都遇过，去年制作的一个大型<span>app</span>在多国语言化时，客户居然问：『希伯来文版的接口文字应该是从右到左啊，可以改一下吗？』当时心里的回答：『当然可以，你先买下<span> flash player team </span>交给我指挥，我保证半年内生出来给你<span>&#8230;</span>』现在这件事可简单多了，只是<span> UI Component </span>部份要改写的东西还是很费力啊。</span></span></span><span style="font-size: small;"><span style="font-family: 宋体;"><span>-custom filter/effect with &#8220;Hydra&#8221; image processing language:<br />
</span><span>这算是非常有趣的新玩意，<span>Hydra </span>是一种类似<span> C </span>的语言，<span>user </span>可用它编辑自已独门的<span> filter/effect</span>，之前有<span> Vector/Bitmap API </span>大家就已经玩出一堆疯狂的把戏，现在有了更<span> low-level </span>的工具，呵呵呵，精彩可期，只是以后教<span> flash </span>的讲师是不是也要进修一下<span> C/C++ </span>了<span>? Orz</span></span></span></span></p>
<p><span style="font-size: small;"></span></p>
<p><span style="font-size: small;"></span><span style="font-size: small;"><strong></strong></span></p>
<p><span style="font-size: small;"><strong><span style="font-family: 宋体;">4. Flash Lite 3 </span></strong><strong><span style="font-family: 宋体;">推出</span></strong></span></p>
<p><span><span style="font-size: small;"><span style="font-family: 宋体;">功能介绍看<span><a href="http://ria.richtechmedia.com/go.php?http://www.adobe.com/products/flashlite/features/" title="(159 hits)"><span><span>这里</span></span></a></span></span></span></span><span><span style="font-size: small; font-family: 宋体;">重点有</span><span><br />
<span style="font-size: small; font-family: 宋体;">-flash home: </span></span><span style="font-size: small;"><span style="font-family: 宋体;">这个算是真正的新玩意，以往<span> flash lite </span>都是以<span> app </span>的型式存在于手机上，也就是要用时才启动，但<span> flash home </span>则是直接用<span> flash lite </span>取代掉手机的开机画面，一开机完就是<span> flash lite </span>在那里，而且它是<span> instant on</span>。</span></span></span><span><span style="font-size: small;"><span style="font-family: 宋体;">之前曾聊过<span> LG phone </span>整个<span> UI </span>都用<span> flash lite </span>写成，现在则是更进一步攻占了开机画面，未来的发展非常有趣啊，希望它能尽快追上<span> as3 </span>的脚步，把传说中的<span> flex framework for mobile </span>搬出来，届时可就玩到乐翻天了。</span></span></span><span><span style="font-size: small; font-family: 宋体;">-as2 support: </span></span><span><span style="font-size: small; font-family: 宋体;">这个好像喊很久了，现在真的支持<span> class </span>了吗？</span><span><br />
<span style="font-size: small; font-family: 宋体;">-flv support: </span></span><span style="font-size: small; font-family: 宋体;">这个到是很重要的新功能，不过已经不是新闻，今年初时就已发表</span><span><br />
<span style="font-size: small; font-family: 宋体;">-xml loading: </span></span><span style="font-size: small;"><span style="font-family: 宋体;">从<span> flash lite 2.1 </span>起就可以支持<span> socket server</span>，所以要在手机上玩<span> push/pull </span>变的非常简单</span></span></span><span style="font-size: small;"><strong><span style="font-family: 宋体;">&nbsp;</span></strong></span></p>
<p></p>
<p><span style="font-size: small;"><strong></strong></span></p>
<p><span style="font-size: small;"><strong><span style="font-family: 宋体;">5. VOIP in flash</span></strong></span></p>
<p><span style="font-size: small;"><span style="font-family: 宋体;"><span>FP </span><span>将支持<span> voip </span>不是新闻，但真正看到它运作还是吓一跳。</span></span></span><span><a href="http://ria.richtechmedia.com/go.php?http://pac.ifica.net/" title="(180 hits)"><span style="font-size: small; font-family: 宋体;">Pacifica</span></a><span style="font-size: small; font-family: 宋体;"> </span></span><span><span style="font-size: small;"><span style="font-family: 宋体;">是这个产品的代号，它将提供下列功能<span>:</span></span></span></span><span><span style="font-size: small;"><span style="font-family: 宋体;">Version 1:<br />
* HQ voice chat<br />
* text instant messaging<br />
* presence<br />
* NAT/Firewall traversal<br />
* Ajax/HTML, Flash/Flex</span></span></span><span><span style="font-size: small;"><span style="font-family: 宋体;">Future Roadmap:<br />
* video chat<br />
* p2p<br />
* AIR<br />
* PSTN Access</span></span></span><span><span style="font-size: small; font-family: 宋体;">要注意的重点是这几个字<span>: VoIP, SIP, SDP </span>与<span> P2P</span>。</span><span><br />
</span><span style="font-size: small;"><span style="font-family: 宋体;">你能想象一旦<span> flash player </span>本身内建<span> VoIP </span>与<span> SIP </span>支持后，可能的应用有多广吗？简单来说，上面<span>listing </span>里面随便一项，都可以将这个世界再翻一遍，差不多就是这样的影响力。</span></span></span></p>
<p></p>
<p><span></span><span style="font-size: small;"><strong></strong></span></p>
<p><span style="font-size: small;"><strong><span style="font-family: 宋体;">6. CoCoMo</span></strong></span></p>
<p><span><span style="font-size: small;"><span style="font-family: 宋体;">这可不是<span> Adobe </span>与 <span><a href="http://ria.richtechmedia.com/go.php?http://lyrics.songtext.name/Beach%20Boys/Cocomo-24210.html" title="(131 hits)">Beach Boys</a> </span>的异业结盟。</span></span></span><span style="font-size: small;"><span style="font-family: 宋体;"><span>CoCoMo </span><span>是<span> Adobe Connect (</span>也就是<span> Breeze) </span>新版本的代号，不出所料果然用<span> flex </span>全部改写，但更惊人的是它开始玩起另一个更有潜力的市场，<span>API platform !</span>将来<span> flex developer </span>可操作<span> Adobe Connect </span>的<span> API </span>来制作各种<span> desktop sharing, audio/video chat &amp; collaboration</span>，相较之下，之前炒的火热的<span> facebook platform </span>实在是没什么啊<span>(</span>不过当然这两者可以是完美的互补，不一定是零合游戏<span>)</span>。</span></span></span></p>
<p></p>
<p><span style="font-size: small;"></span><span style="font-size: small;"><strong></strong></span></p>
<p><span style="font-size: small;"><strong><span style="font-family: 宋体;">7. Share</span></strong></span></p>
<p><span><span style="font-size: small;"><span style="font-family: 宋体;">一个<span><a href="http://ria.richtechmedia.com/go.php?http://share.adobe.com/" title="(194 hits)"><span><span>在线文件、分享、阅读的平台</span></span></a></span>，每个<span>user </span>有<span> 1gb </span>空间。</span></span></span><span><span style="font-size: small;"><span style="font-family: 宋体;">同样用<span> flex </span>写成，用了许多熟悉的组件，例如<span> page component (oh, the great Ely!) </span>与<span> flash paper</span>，也提供<span> REST style API </span>可供<span> mesh up</span>，将来打算整合<span> Buzzword </span>提供编辑功能。</span></span></span><span><span style="font-size: small;"><span style="font-family: 宋体;">从本质来看，<span>online-doc sharing </span>这种东西当然早就有人做过了，网络上随便都可以找到一狗票，同样是让人上传文件，然后转档成<span> swf </span>再用<span> flash player </span>来看，那<span> adobe </span>又何苦呢？</span></span></span><span><span style="font-size: small;"><span style="font-family: 宋体;">就我来看，<span>Share </span>是<span> adobe </span>在<span> web publishing </span>方面的新尝试，主要利用的优势当然就是自家的<span> PDF </span>与<span> flash player</span>，但跟其它单纯只是 <span>web 2.0 startup </span>公司不同的是，<span>adobe </span>心里想的应该是它完整的<span> electronic publishing </span>平台，从内容、制作、生成到消费，希望能通通包下来，建立大一统的体系，我相信<span> Share </span>与之前介绍过的<span> ebook reader </span>都只是这个计划下的部份产物，未来发展还待观察。</span></span></span></p>
<p></p>
<p><span></span><span style="font-size: small;"><strong></strong></span></p>
<p><span style="font-size: small;"><strong><span style="font-family: 宋体;">8. C/C++ to AS3 conversion</span></strong></span> </p>
<p><span><span style="font-size: small;"><span style="font-family: 宋体;">&nbsp;<img src="http://www.boostworthy.com/blog_articles/adobemax2007/max13.jpg" alt="LLVM" width="491" border="0" height="326" /></span></span></span></p>
<p><span><span style="font-size: small;"><span style="font-family: 宋体;">这个玩意非常有趣，这位神人写了一个<span> compiler</span>，可以将<span> C/C++ </span>的<span> code </span>直接转译成<span> AS3</span>，然后再编译成<span> swf </span>供<span> flash/flex/air </span>使用，现场最另人震撼的<span> demo </span>就是他直接将<span> Quake (</span>一个<span> doom-like </span>的射击游戏<span>) </span>编译成<span> flash </span>版然后玩了起来，你可以想见现场会疯狂到什么程度<span>!! (</span>更酷的是这位工程师还是一副平淡的表情，真正是扮猪吃老虎的极致表现啊<span>)</span>。</span></span></span><span><span style="font-size: small;"><span style="font-family: 宋体;">好，热情完毕，接着分析师上身。</span></span></span><span><span style="font-size: small;"><span style="font-family: 宋体;">我主要思考的是下列三点：</span></span></span><span><span style="font-size: small; font-family: 宋体;">1. </span></span><span><span style="font-size: small; font-family: 宋体;">为何需要这个东西？上图中四个角落写着<span> (ruby, php, python, lua), </span>它代表什么？</span><span><br />
<span style="font-size: small; font-family: 宋体;">2. </span></span><span style="font-size: small; font-family: 宋体;">这东西背后的企图是什么？</span><span><br />
<span style="font-size: small; font-family: 宋体;">3. </span></span><span style="font-size: small;"><span style="font-family: 宋体;">谁会获益？它可以用在什么地方？发展潜力有多大？</span></span></span><span><span style="font-size: small;"><span style="font-family: 宋体;">基本上我已经有了一套大致的想法与理论，但很有兴趣想听听各位的想法。</span></span></span></p>
<p></p>
<p><span></span><span style="font-size: small;"><strong></strong></span></p>
<p><span style="font-size: small;"><strong><span style="font-family: 宋体;">9. Adobe </span></strong><strong><span style="font-family: 宋体;">买下<span> Buzzword</span></span></strong></span></p>
<p><span style="font-size: small;"><strong></strong></span><span><span style="font-size: small;"><span style="font-family: 宋体;">这件事其实几个月前就有风声出来，当 <span>adobe </span>第一批工程师进驻<span> buzzword </span>办公室时，明眼人就知道是怎么回事了，反而比较奇怪的为何<span> SlideRocket </span>一直谈不下来<span>(</span>趁人家还没<span> IPO </span>前多撒点钱快点搞定将来比较好办事啊<span>)</span>？</span></span></span><span><span style="font-size: small;"><span style="font-family: 宋体;">从市场角度来看，<span>Buzzword(</span>类似<span> word </span>的文字编辑器<span>) </span>与<span> SlideRocket(</span>类似<span> powerpoint </span>的简单软件<span>) </span>应该是当今<span> RIA </span>业界最俱代表性与杀伤力的两支<span>app</span>，它们几乎有撼动<span> Office </span>市场的能力，因此<span> adobe </span>对它们的重视与关爱可说是其来有自，亳不奇怪。</span></span></span><span><span style="font-size: small;"><span style="font-family: 宋体;">比较值得观察的将是，迟早<span> Adobe </span>手上会有<span> word, powerpoint </span>与<span> excel </span>兼容的软件<span>(</span>当然是<span> built with Flex/AIR)</span>，届时世界上只有四间主流商业公司有成熟的<span> office </span>产品<span>(OO.o </span>这种就先不算进来，呃，好，其实还有<span> IBM Lotus Symphony</span>，不过知名度不高也先放一边<span>)</span></span></span></span><span><span style="font-size: small; font-family: 宋体;">-Microsoft: Office </span></span><span><span style="font-size: small; font-family: 宋体;">的霸主地位无庸置疑，</span><span style="font-size: small;"><span style="font-family: 宋体;"><span>runs on desktop only<br />
-Apple: Mac </span>上的<span> Office </span>霸主</span></span><span style="font-size: small;"><span style="font-family: 宋体;"><span>, runs on desktop only<br />
-Google: Doc </span>系列产品，算是目前<span> web-based </span>里最成熟的一家</span></span><span><br />
<span style="font-size: small; font-family: 宋体;">-Adobe: </span></span><span style="font-size: small;"><span style="font-family: 宋体;">同样为<span> web-based, </span>但因为采用<span> flash </span>制作，因此操作接口与功能将明显超越<span> google docs (</span>与其它<span> ajax </span>系列的<span> office-apps)</span></span></span></span><span><span style="font-size: small;"><span style="font-family: 宋体;">而其中只有<span> google </span>与<span> adobe </span>已经很积极在<span> web-based </span>这块深耕<span>(MS</span>的<span> office live </span>则还未成熟<span>)</span>，从趋势来看<span>(on-line, access everywhere, collaboration, messaging)</span>，<span>web</span>式的产品前途是比较看好的，而从技术面来看，<span>flash</span>式的<span> web app </span>往往又比<span> ajax </span>式的好一点<span>(</span>至少在<span> tool </span>级这个领域<span>)</span>，所以<span> adobe </span>可以说是已经站在比较有利的<span> position</span>，这是很有趣也值得观察的事<span>(</span>而且要睁大眼睛好好看着<span>)</span>。</span></span></span></p>
<p></p>
<p><span style="font-size: small;"><span style="font-family: 宋体;"></span></span></p>
<p><span style="font-size: small;"><span style="font-family: 宋体;"><span><strong>10. Flash CS4 </strong></span><span><strong>与</strong><span><strong> Fireworks</strong> </span></span></span></span></p>
<p><span style="font-size: small;"><span style="font-family: 宋体;"><span><span>CS4</span></span></span></span><span style="font-size: small;"><span style="font-family: 宋体;"><span>Flash </span><span>部份有许多不错的新功能，例如可在<span> authoring time live preview video content</span>，<span>timeline </span>大改良<span>, tween </span>方式更自由，以及神奇的<span> IK </span>效果，我想对能掌握这些新东西的多媒体设计师来说，这应该是非常棒的消息。</span></span></span><span style="font-size: small;"><span style="font-family: 宋体;"><span>Fireworks </span><span>部份则是强调与<span> flex </span>的整合，例如可在<span> fireworks </span>里制作组件与<span>style/skin </span>然后直接输出有<span> scale-9 </span>的<span> swc </span>给<span> flex </span>用，基本上都还是很粗浅的整合尝试，未来<span>12</span>个月还要多努力。</span></span></span></p>
<p><span style="font-size: small;"></span></p>
<p><span style="font-size: small;"></span><span style="font-size: small;"><strong><span style="font-family: 宋体;">总结</span></strong></span></p>
<p><span style="font-size: small;"><strong></strong></span><span><span style="font-size: small;"><span style="font-family: 宋体;">综观以上<span> highlight </span>出来的<span> 10</span>点，如果你仔细去推敲每一点背后所代表的意义，并思考它们未来可能的影响力与冲击效应，或许你会像我一样觉得全身发热心跳加快。</span></span></span><span><span style="font-size: small;"><span style="font-family: 宋体;">基本上观察这次<span> Max </span>揭露的消息，感觉很像在看高手对弈，当你看到局中一步棋时，就知道胜负已定，未来所有的步数皆已确定，结果只是时间问题，而更令人惊讶的是，往往这致胜的一步是如此的不明显与不经意，轻轻的滑过就决定了未来，这才是真正让人自叹弗如的地方。</span></span></span><span><span style="font-size: small;"><span style="font-family: 宋体;">想到这里，只能说这真的是一个<span> exciting times</span>，很高兴能置身其中、亲自经历而不是在十年后回头来赞叹当年。</span></span></span><span><span style="font-size: small; font-family: Times New Roman;"> <br />
</span></span></p>
</div>
<img src ="http://www.blogjava.net/gembin/aggbug/230871.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gembin/" target="_blank">gembin</a> 2008-09-24 14:21 <a href="http://www.blogjava.net/gembin/archive/2008/09/24/230871.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>  Flex Shared Object</title><link>http://www.blogjava.net/gembin/archive/2008/09/23/230662.html</link><dc:creator>gembin</dc:creator><author>gembin</author><pubDate>Tue, 23 Sep 2008 06:15:00 GMT</pubDate><guid>http://www.blogjava.net/gembin/archive/2008/09/23/230662.html</guid><wfw:comment>http://www.blogjava.net/gembin/comments/230662.html</wfw:comment><comments>http://www.blogjava.net/gembin/archive/2008/09/23/230662.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gembin/comments/commentRss/230662.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gembin/services/trackbacks/230662.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: SharedObject&nbsp;&nbsp;<a href='http://www.blogjava.net/gembin/archive/2008/09/23/230662.html'>阅读全文</a><img src ="http://www.blogjava.net/gembin/aggbug/230662.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gembin/" target="_blank">gembin</a> 2008-09-23 14:15 <a href="http://www.blogjava.net/gembin/archive/2008/09/23/230662.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Loading style sheets at run time (from adobe)</title><link>http://www.blogjava.net/gembin/archive/2008/09/19/229935.html</link><dc:creator>gembin</dc:creator><author>gembin</author><pubDate>Fri, 19 Sep 2008 06:49:00 GMT</pubDate><guid>http://www.blogjava.net/gembin/archive/2008/09/19/229935.html</guid><wfw:comment>http://www.blogjava.net/gembin/comments/229935.html</wfw:comment><comments>http://www.blogjava.net/gembin/archive/2008/09/19/229935.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gembin/comments/commentRss/229935.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gembin/services/trackbacks/229935.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Loading style sheets at run time, really useful&nbsp;&nbsp;<a href='http://www.blogjava.net/gembin/archive/2008/09/19/229935.html'>阅读全文</a><img src ="http://www.blogjava.net/gembin/aggbug/229935.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gembin/" target="_blank">gembin</a> 2008-09-19 14:49 <a href="http://www.blogjava.net/gembin/archive/2008/09/19/229935.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Flex3 RSL</title><link>http://www.blogjava.net/gembin/archive/2008/09/18/229760.html</link><dc:creator>gembin</dc:creator><author>gembin</author><pubDate>Thu, 18 Sep 2008 09:40:00 GMT</pubDate><guid>http://www.blogjava.net/gembin/archive/2008/09/18/229760.html</guid><wfw:comment>http://www.blogjava.net/gembin/comments/229760.html</wfw:comment><comments>http://www.blogjava.net/gembin/archive/2008/09/18/229760.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gembin/comments/commentRss/229760.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gembin/services/trackbacks/229760.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 介绍Flex3的这个新功能前先和大家温习一下以前的东西：RSL。&nbsp;&nbsp;<a href='http://www.blogjava.net/gembin/archive/2008/09/18/229760.html'>阅读全文</a><img src ="http://www.blogjava.net/gembin/aggbug/229760.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gembin/" target="_blank">gembin</a> 2008-09-18 17:40 <a href="http://www.blogjava.net/gembin/archive/2008/09/18/229760.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Mate: Event driven framework for Flex</title><link>http://www.blogjava.net/gembin/archive/2008/09/18/229734.html</link><dc:creator>gembin</dc:creator><author>gembin</author><pubDate>Thu, 18 Sep 2008 08:45:00 GMT</pubDate><guid>http://www.blogjava.net/gembin/archive/2008/09/18/229734.html</guid><wfw:comment>http://www.blogjava.net/gembin/comments/229734.html</wfw:comment><comments>http://www.blogjava.net/gembin/archive/2008/09/18/229734.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gembin/comments/commentRss/229734.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gembin/services/trackbacks/229734.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要:  Event driven framework for Flex<br>&nbsp;&nbsp;<a href='http://www.blogjava.net/gembin/archive/2008/09/18/229734.html'>阅读全文</a><img src ="http://www.blogjava.net/gembin/aggbug/229734.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gembin/" target="_blank">gembin</a> 2008-09-18 16:45 <a href="http://www.blogjava.net/gembin/archive/2008/09/18/229734.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Excluding font outlines in Flex can shave off over 200kb!</title><link>http://www.blogjava.net/gembin/archive/2008/09/18/229673.html</link><dc:creator>gembin</dc:creator><author>gembin</author><pubDate>Thu, 18 Sep 2008 05:50:00 GMT</pubDate><guid>http://www.blogjava.net/gembin/archive/2008/09/18/229673.html</guid><wfw:comment>http://www.blogjava.net/gembin/comments/229673.html</wfw:comment><comments>http://www.blogjava.net/gembin/archive/2008/09/18/229673.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gembin/comments/commentRss/229673.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gembin/services/trackbacks/229673.html</trackback:ping><description><![CDATA[<div class="entry-content">
<p>Often when you need to embed a font
you also need to include &#8216;bold&#8217; and sometimes &#8216;italic&#8217; styles.
Sometimes you need more than one fontFamily. Flex by default will embed
all glyphs of a fontFamily. Embedding every glyph if generally
unnecessary. By restricting the character set (&#8217;unicode-range&#8217;) you can
shave off between 50-100kb or more per font style (FontFamilies have
varying amounts of glyphs and obviously varying complexities of
outlines which effects how much you can save). Anyway by setting
unicode-range for fonts we managed to shave 300kb off our application,
I wasn&#8217;t expecting it to be so much so thought worth a blog ;)<br />
<code></code></p>
<div class="wp_syntax">
<div class="code">
<pre class="css"><span style="color: #a1a100;">@font-face {</span><br />
src<span style="color: #66cc66;">:</span> <span style="color: #993333;">url</span><span style="color: #66cc66;">(</span><span style="color: #ff0000;">"assets/Arial.ttf"</span><span style="color: #66cc66;">)</span><span style="color: #66cc66;">;</span><br />
fontFamily<span style="color: #66cc66;">:</span> Arial<span style="color: #66cc66;">;</span><br />
advancedAntiAliasing<span style="color: #66cc66;">:</span> true<span style="color: #66cc66;">;</span><br />
unicode-range<span style="color: #66cc66;">:</span> U<span style="color: #993333;">+0030</span>-U<span style="color: #993333;">+0039</span>, <span style="color: #808080; font-style: italic;">/* 0-9 */</span><br />
U<span style="color: #993333;">+0041</span>-U+005A, <span style="color: #808080; font-style: italic;">/* Uppercase A-Z */</span><br />
U<span style="color: #993333;">+0061</span>-U+007A, <span style="color: #808080; font-style: italic;">/* Lowercase a-z */</span><br />
U<span style="color: #993333;">+0021</span>-U+002F, <span style="color: #808080; font-style: italic;">/* !"#$%&amp;amp;'()*+,-./ */</span><br />
U+003A-U<span style="color: #993333;">+0040</span>, <span style="color: #808080; font-style: italic;">/* :;&amp;lt;=&amp;gt;?@ */</span><br />
U+005B-U<span style="color: #993333;">+0060</span>, <span style="color: #808080; font-style: italic;">/* [\]^_ */</span><br />
U+00A3-U+00A3, <span style="color: #808080; font-style: italic;">/* &#163; */</span><br />
U+00A9-U+00A9, <span style="color: #808080; font-style: italic;">/* &#169; */</span><br />
U+00AE-U+00AE <span style="color: #808080; font-style: italic;">/* &#174; */</span><br />
<span style="color: #808080; font-style: italic;">/* U+00BF-U+0259  FOREIGN CHRS */</span><br />
<span style="color: #66cc66;">}</span></pre>
</div>
</div>
<div style="border: 1px dashed #2f6fab; padding: 1em; line-height: 1.1em; background-color: #f9f9f9;">Further reading:<br />
<a href="http://livedocs.adobe.com/flex/3/html/help.html?content=fonts_07.html" onclick="javascript:pageTracker._trackPageview('/livedocs.adobe.com');">http://livedocs.adobe.com/flex/3/html/help.html?content=fonts_07.html</a></div>
<p>if anyone knows of other ranges you think can be generally useful please let me know ;)</p>
</div>
<img src ="http://www.blogjava.net/gembin/aggbug/229673.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gembin/" target="_blank">gembin</a> 2008-09-18 13:50 <a href="http://www.blogjava.net/gembin/archive/2008/09/18/229673.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Memory Profile of MXML vs AS3 for ItemRenderers</title><link>http://www.blogjava.net/gembin/archive/2008/09/18/229667.html</link><dc:creator>gembin</dc:creator><author>gembin</author><pubDate>Thu, 18 Sep 2008 05:33:00 GMT</pubDate><guid>http://www.blogjava.net/gembin/archive/2008/09/18/229667.html</guid><wfw:comment>http://www.blogjava.net/gembin/comments/229667.html</wfw:comment><comments>http://www.blogjava.net/gembin/archive/2008/09/18/229667.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gembin/comments/commentRss/229667.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gembin/services/trackbacks/229667.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Memory Profile of MXML vs AS3 for ItemRenderers&nbsp;&nbsp;<a href='http://www.blogjava.net/gembin/archive/2008/09/18/229667.html'>阅读全文</a><img src ="http://www.blogjava.net/gembin/aggbug/229667.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gembin/" target="_blank">gembin</a> 2008-09-18 13:33 <a href="http://www.blogjava.net/gembin/archive/2008/09/18/229667.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Book: Learning Flex 3: Getting up to Speed with Rich Internet Applications</title><link>http://www.blogjava.net/gembin/archive/2008/09/10/228130.html</link><dc:creator>gembin</dc:creator><author>gembin</author><pubDate>Wed, 10 Sep 2008 05:31:00 GMT</pubDate><guid>http://www.blogjava.net/gembin/archive/2008/09/10/228130.html</guid><wfw:comment>http://www.blogjava.net/gembin/comments/228130.html</wfw:comment><comments>http://www.blogjava.net/gembin/archive/2008/09/10/228130.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gembin/comments/commentRss/228130.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gembin/services/trackbacks/228130.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Book: Learning Flex 3: Getting up to Speed with Rich Internet Applications&nbsp;&nbsp;<a href='http://www.blogjava.net/gembin/archive/2008/09/10/228130.html'>阅读全文</a><img src ="http://www.blogjava.net/gembin/aggbug/228130.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gembin/" target="_blank">gembin</a> 2008-09-10 13:31 <a href="http://www.blogjava.net/gembin/archive/2008/09/10/228130.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Flex 3 Compiler Design(from adobe)</title><link>http://www.blogjava.net/gembin/archive/2008/09/10/228089.html</link><dc:creator>gembin</dc:creator><author>gembin</author><pubDate>Wed, 10 Sep 2008 03:01:00 GMT</pubDate><guid>http://www.blogjava.net/gembin/archive/2008/09/10/228089.html</guid><wfw:comment>http://www.blogjava.net/gembin/comments/228089.html</wfw:comment><comments>http://www.blogjava.net/gembin/archive/2008/09/10/228089.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gembin/comments/commentRss/228089.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gembin/services/trackbacks/228089.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Flex 3 Compiler &nbsp;&nbsp;<a href='http://www.blogjava.net/gembin/archive/2008/09/10/228089.html'>阅读全文</a><img src ="http://www.blogjava.net/gembin/aggbug/228089.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gembin/" target="_blank">gembin</a> 2008-09-10 11:01 <a href="http://www.blogjava.net/gembin/archive/2008/09/10/228089.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>List of 33 Flex APIs, Libraries, Components and Tools</title><link>http://www.blogjava.net/gembin/archive/2008/09/05/227204.html</link><dc:creator>gembin</dc:creator><author>gembin</author><pubDate>Fri, 05 Sep 2008 06:03:00 GMT</pubDate><guid>http://www.blogjava.net/gembin/archive/2008/09/05/227204.html</guid><wfw:comment>http://www.blogjava.net/gembin/comments/227204.html</wfw:comment><comments>http://www.blogjava.net/gembin/archive/2008/09/05/227204.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gembin/comments/commentRss/227204.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gembin/services/trackbacks/227204.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: List of 33 Flex APIs, Libraries, Components and Tools&nbsp;&nbsp;<a href='http://www.blogjava.net/gembin/archive/2008/09/05/227204.html'>阅读全文</a><img src ="http://www.blogjava.net/gembin/aggbug/227204.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gembin/" target="_blank">gembin</a> 2008-09-05 14:03 <a href="http://www.blogjava.net/gembin/archive/2008/09/05/227204.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Flex资料</title><link>http://www.blogjava.net/gembin/archive/2008/09/04/226924.html</link><dc:creator>gembin</dc:creator><author>gembin</author><pubDate>Thu, 04 Sep 2008 06:17:00 GMT</pubDate><guid>http://www.blogjava.net/gembin/archive/2008/09/04/226924.html</guid><wfw:comment>http://www.blogjava.net/gembin/comments/226924.html</wfw:comment><comments>http://www.blogjava.net/gembin/archive/2008/09/04/226924.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gembin/comments/commentRss/226924.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gembin/services/trackbacks/226924.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/gembin/archive/2008/09/04/226924.html'>阅读全文</a><img src ="http://www.blogjava.net/gembin/aggbug/226924.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gembin/" target="_blank">gembin</a> 2008-09-04 14:17 <a href="http://www.blogjava.net/gembin/archive/2008/09/04/226924.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse vs OSGI and Solstice vs RCP</title><link>http://www.blogjava.net/gembin/archive/2008/08/26/224476.html</link><dc:creator>gembin</dc:creator><author>gembin</author><pubDate>Tue, 26 Aug 2008 06:05:00 GMT</pubDate><guid>http://www.blogjava.net/gembin/archive/2008/08/26/224476.html</guid><wfw:comment>http://www.blogjava.net/gembin/comments/224476.html</wfw:comment><comments>http://www.blogjava.net/gembin/archive/2008/08/26/224476.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gembin/comments/commentRss/224476.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gembin/services/trackbacks/224476.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Flex meets osgi&nbsp;&nbsp;<a href='http://www.blogjava.net/gembin/archive/2008/08/26/224476.html'>阅读全文</a><img src ="http://www.blogjava.net/gembin/aggbug/224476.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gembin/" target="_blank">gembin</a> 2008-08-26 14:05 <a href="http://www.blogjava.net/gembin/archive/2008/08/26/224476.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>flex 各组件对应的样式属性</title><link>http://www.blogjava.net/gembin/archive/2008/08/22/223669.html</link><dc:creator>gembin</dc:creator><author>gembin</author><pubDate>Fri, 22 Aug 2008 02:19:00 GMT</pubDate><guid>http://www.blogjava.net/gembin/archive/2008/08/22/223669.html</guid><wfw:comment>http://www.blogjava.net/gembin/comments/223669.html</wfw:comment><comments>http://www.blogjava.net/gembin/archive/2008/08/22/223669.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gembin/comments/commentRss/223669.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gembin/services/trackbacks/223669.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/gembin/archive/2008/08/22/223669.html'>阅读全文</a><img src ="http://www.blogjava.net/gembin/aggbug/223669.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gembin/" target="_blank">gembin</a> 2008-08-22 10:19 <a href="http://www.blogjava.net/gembin/archive/2008/08/22/223669.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Flex事件机制的工作流程 </title><link>http://www.blogjava.net/gembin/archive/2008/08/22/223668.html</link><dc:creator>gembin</dc:creator><author>gembin</author><pubDate>Fri, 22 Aug 2008 02:17:00 GMT</pubDate><guid>http://www.blogjava.net/gembin/archive/2008/08/22/223668.html</guid><wfw:comment>http://www.blogjava.net/gembin/comments/223668.html</wfw:comment><comments>http://www.blogjava.net/gembin/archive/2008/08/22/223668.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gembin/comments/commentRss/223668.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gembin/services/trackbacks/223668.html</trackback:ping><description><![CDATA[<p><strong id="cj3f2"><span style="font-size: small;">事件机制的工作流程</span>
</strong>
<br id="cj3f4" />
<br id="g-ol" />
<strong id="cj3f5">关于事件流</strong>
<br id="cj3f6" />
</p>
<div id="cj3f7" style="margin-left: 40px;">目标对象：派发事件的对象<br id="xnqc" />
当事件发生后生成一个携带数据的对象，然后检查目标对象是否存在显示层中，并遍历从根容器一直到目标对象所在位置的所有对象，以树形势表示。自动检测所经过的节点是否注册了监听器。<br id="e5.g" />
<br id="e5.g0" />
事件流暗运行流程分为3步：<br id="y1rr" />
</div>
<div id="y1rr0" style="margin-left: 40px;">
<ul id="y1rr1">
    <li id="y1rr2">捕获阶段：捕获事件 capturing，从根节点开始顺序而下，检测每个节点是否注册了监听器。同时，<span class="hilite1"><span class="hilite1">Flex</span></span> 将事件对象的currentTarget 值改为当前正在检测的对象。如果注册了监听器，则调用监听函数。<br id="y1rr3" />
    </li>
    <li id="y1rr4">目标阶段：检测目标的监听器 targeting：触发在目标对象本身注册的监听程序<br id="ti7p" />
    </li>
    <li id="y1rr5">冒泡阶段：事件冒泡 bubbling：从目标节点到根节点，检测每个节点是否注册了监听器，如果有，则调用监听函数。</li>
</ul>
<br id="h07t" />
每个事件对象都有以下属性：<br id="oani" />
target：事件的派发者<br id="oani0" />
currentTarget：当前正在检测的的对象，帮助跟踪事件传播的过程。<br id="vp2g" />
<br id="vp2g0" />
默认情况下，捕获功能处于关闭状态，一般没有必要进行捕获跟踪。<br id="tcta" />
事件只在bubbles 属性为true
时才进行冒泡，可以冒泡的事件包括：change、click、doubleClick、keyDown、keyUp、mouseDown、
mouseUp。并且不能在一个监听器中同时打开捕获和冒泡功能，要做到这一点，只能注册两个监听器，分别实现。<br id="r61a" />
<br id="w-t8" />
现在来看一个例子：</div>
<div style="margin-left: 40px;">
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Xml代码 <a href="http://www.javaeye.com/topic/214780#" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" title="复制代码"></a></div>
</div>
<ol class="dp-xml" start="1">
    <li><span><span class="tag">&lt;?</span><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">"1.0"</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">"utf-8"</span><span class="tag">?&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span><span class="tag">&lt;</span><span class="tag-name">mx:Application</span><span>&nbsp;</span><span class="attribute">xmlns:mx</span><span>=</span><span class="attribute-value">"http://www.adobe.com/2006/mxml"</span><span>&nbsp;</span><span class="attribute">layout</span><span>=</span><span class="attribute-value">"absolute"</span><span>&nbsp;</span><span class="attribute">creationComplete</span><span>=</span><span class="attribute-value">"initApp()"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">mx:Style</span><span>&nbsp;</span><span class="attribute">source</span><span>=</span><span class="attribute-value">"style.css"</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">mx:Script</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="cdata">&lt;![CDATA[</span>&nbsp;</span></li>
    <li><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;flash.events.MouseEvent;</span>&nbsp;</span></li>
    <li><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>&nbsp;</span></li>
    <li><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;internal&nbsp;function&nbsp;initApp():void{</span>&nbsp;</span></li>
    <li><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;canvas_1.<span class="hilite2"><span class="hilite2">addEventListener</span></span>(MouseEvent.CLICK,pressBtn,true);</span>&nbsp;</span></li>
    <li><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;canvas_2.<span class="hilite2"><span class="hilite2">addEventListener</span></span>(MouseEvent.CLICK,pressBtn);</span>&nbsp;</span></li>
    <li><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;btn_1.<span class="hilite2"><span class="hilite2">addEventListener</span></span>(MouseEvent.CLICK,pressBtn);</span>&nbsp;</span></li>
    <li><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;btn_2.<span class="hilite2"><span class="hilite2">addEventListener</span></span>(MouseEvent.CLICK,pressBtn);</span>&nbsp;</span></li>
    <li><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span>&nbsp;</span></li>
    <li><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;internal&nbsp;function&nbsp;output(msg:String):void{</span>&nbsp;</span></li>
    <li><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;debug_txt.text&nbsp;+=&nbsp;msg+"\n";</span>&nbsp;</span></li>
    <li><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>&nbsp;</span></li>
    <li><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;internal&nbsp;function&nbsp;pressBtn(evt:MouseEvent):void{</span>&nbsp;</span></li>
    <li><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;output("是否冒泡--"+evt.bubbles);</span>&nbsp;</span></li>
    <li><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;output("目标对象--&nbsp;"+evt.target+"&nbsp;--&nbsp;"+evt.eventPhase);</span>&nbsp;</span></li>
    <li><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;output("遍历对象--&nbsp;"+evt.currentTarget);</span>&nbsp;</span></li>
    <li><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;output("------------");</span>&nbsp;</span></li>
    <li><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span>&nbsp;</span></li>
    <li><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]]&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">mx:Script</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">mx:Canvas</span><span>&nbsp;</span><span class="attribute">id</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">"canvas_1"</span><span>&nbsp;</span><span class="attribute">styleName</span><span>=</span><span class="attribute-value">"box"</span><span>&nbsp;</span><span class="attribute">x</span><span>=</span><span class="attribute-value">"37"</span><span>&nbsp;</span><span class="attribute">y</span><span>=</span><span class="attribute-value">"63"</span><span>&nbsp;</span><span class="attribute">width</span><span>=</span><span class="attribute-value">"445"</span><span>&nbsp;</span><span class="attribute">height</span><span>=</span><span class="attribute-value">"216"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">mx:Text</span><span>&nbsp;</span><span class="attribute">x</span><span>=</span><span class="attribute-value">"13"</span><span>&nbsp;</span><span class="attribute">y</span><span>=</span><span class="attribute-value">"10"</span><span>&nbsp;</span><span class="attribute">text</span><span>=</span><span class="attribute-value">"Canvas_1"</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">mx:Canvas</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">"canvas_2"</span><span>&nbsp;</span><span class="attribute">styleName</span><span>=</span><span class="attribute-value">"box"</span><span>&nbsp;</span><span class="attribute">x</span><span>=</span><span class="attribute-value">"10"</span><span>&nbsp;</span><span class="attribute">y</span><span>=</span><span class="attribute-value">"102"</span><span>&nbsp;</span><span class="attribute">width</span><span>=</span><span class="attribute-value">"173"</span><span>&nbsp;</span><span class="attribute">height</span><span>=</span><span class="attribute-value">"90"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">mx:Text</span><span>&nbsp;</span><span class="attribute">x</span><span>=</span><span class="attribute-value">"10"</span><span>&nbsp;</span><span class="attribute">y</span><span>=</span><span class="attribute-value">"10"</span><span>&nbsp;</span><span class="attribute">text</span><span>=</span><span class="attribute-value">"Canvas_2"</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">mx:Button</span><span>&nbsp;</span><span class="attribute">id</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">"btn_2"</span><span>&nbsp;</span><span class="attribute">x</span><span>=</span><span class="attribute-value">"10"</span><span>&nbsp;</span><span class="attribute">y</span><span>=</span><span class="attribute-value">"38"</span><span>&nbsp;</span><span class="attribute">label</span><span>=</span><span class="attribute-value">"Button_2"</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">mx:Canvas</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">mx:Button</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">"btn_1"</span><span>&nbsp;</span><span class="attribute">x</span><span>=</span><span class="attribute-value">"16"</span><span>&nbsp;</span><span class="attribute">y</span><span>=</span><span class="attribute-value">"38"</span><span>&nbsp;</span><span class="attribute">label</span><span>=</span><span class="attribute-value">"Button_1"</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">mx:Canvas</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">mx:TextArea</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">"debug_txt"</span><span>&nbsp;</span><span class="attribute">styleName</span><span>=</span><span class="attribute-value">"textBox"</span><span>&nbsp;</span><span class="attribute">x</span><span>=</span><span class="attribute-value">"37"</span><span>&nbsp;</span><span class="attribute">y</span><span>=</span><span class="attribute-value">"304"</span><span>&nbsp;</span><span class="attribute">height</span><span>=</span><span class="attribute-value">"198"</span><span>&nbsp;</span><span class="attribute">width</span><span>=</span><span class="attribute-value">"445"</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span><span class="tag">&lt;/</span><span class="tag-name">mx:Application</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre style="display: none;" name="code" class="xml">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="initApp()"&gt;
&lt;mx:Style source="style.css" /&gt;
&lt;mx:Script&gt;
&lt;![CDATA[
import flash.events.MouseEvent;
internal function initApp():void{
canvas_1.<span class="hilite2"><span class="hilite2">addEventListener</span></span>(MouseEvent.CLICK,pressBtn,true);
canvas_2.<span class="hilite2"><span class="hilite2">addEventListener</span></span>(MouseEvent.CLICK,pressBtn);
btn_1.<span class="hilite2"><span class="hilite2">addEventListener</span></span>(MouseEvent.CLICK,pressBtn);
btn_2.<span class="hilite2"><span class="hilite2">addEventListener</span></span>(MouseEvent.CLICK,pressBtn);
}
internal function output(msg:String):void{
debug_txt.text += msg+"\n";
}
internal function pressBtn(evt:MouseEvent):void{
output("是否冒泡--"+evt.bubbles);
output("目标对象-- "+evt.target+" -- "+evt.eventPhase);
output("遍历对象-- "+evt.currentTarget);
output("------------");
}
]]&gt;
&lt;/mx:Script&gt;
&lt;mx:Canvas id = "canvas_1" styleName="box" x="37" y="63" width="445" height="216"&gt;
&lt;mx:Text x="13" y="10" text="Canvas_1"/&gt;
&lt;mx:Canvas id="canvas_2" styleName="box" x="10" y="102" width="173" height="90"&gt;
&lt;mx:Text x="10" y="10" text="Canvas_2"/&gt;
&lt;mx:Button id = "btn_2" x="10" y="38" label="Button_2"/&gt;
&lt;/mx:Canvas&gt;
&lt;mx:Button id="btn_1" x="16" y="38" label="Button_1"/&gt;
&lt;/mx:Canvas&gt;
&lt;mx:TextArea id="debug_txt" styleName="textBox" x="37" y="304" height="198" width="445"/&gt;
&lt;/mx:Application&gt;</pre>
&nbsp;
<div id="dxi.">
</div>
在监听函数 pressBtn 中的属性说明：<br id="sqi:" />
</div>
<ul id="cq3m0">
    <li id="cq3m1">target：派发事件的目标对象</li>
    <li id="cq3m2">currentTarget：事件流当前正经过的目标对象</li>
    <li id="cq3m3">bubbles：是否打开了冒泡功能</li>
    <li id="cq3m4">eventPhase：事件流当前的阶段，1：捕获，2：目标，3：冒泡</li>
</ul>
<p>
<br id="cq3m5" />
<span class="hilite2"><span class="hilite2">addEventListener</span></span>(<br id="vsyt" />
&nbsp; type:String,&nbsp;&nbsp;&nbsp; 事件的类型<br id="vsyt0" />
&nbsp; listener:Function,&nbsp;&nbsp;&nbsp; 监听函数<br id="vsyt1" />
&nbsp; useCapture:Boolean = false,&nbsp; &nbsp; 是否打开捕获功能 <br id="vsyt2" />
&nbsp; priority:int = 0,&nbsp;&nbsp;&nbsp; 监听器优先级别<br id="vsyt3" />
&nbsp; useWeakReference:Boolean = false&nbsp;&nbsp;&nbsp; 是否使用弱引用<br id="vsyt4" />
)<br id="fm46" />
<br id="fm460" />
如果useCapture 为true，打开了捕获功能，则该组件的冒泡阶段被取消。<br id="e-a:" />
只有可视化的对象有3个阶段，而像XML等非可视化对象只有目标阶段。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong id="cj3f9">8.2.2 事件对象</strong>
<br id="wvj6" />
</p>
<div id="wvj60" style="margin-left: 40px;">EventDispatcher 是派发事件的武器，经它派发的事件对象必须是Event类型或者Event的子类。<br id="ylal" />
Event对象中包含目标对象存放的数据，这些数据都成为Event的属性，以供侦听器使用：<br id="vskz" />
Event的属性：<br id="vskz0" />
</div>
<div id="vskz1" style="margin-left: 40px;">
<ul id="vskz2">
    <li id="vskz3">bubbles：只读，布尔，事件是否开启冒泡功能</li>
    <li id="vskz4">cancelable：只读，布尔，处理事件的默认行为是否可以停止。主要针对一些系统事件，如果值为true，则Event的preventDefault方法可以使用，否则不可用。</li>
    <li id="vskz5">currentTarget：只读，对象，当前正在调用监听器的对象</li>
    <li id="vskz6">eventPhase：只读，整数，返回事件流正经历的阶段。1：捕获，2：目标，3：冒泡</li>
    <li id="vskz7">target：只读，派发事件的目标对象</li>
    <li id="vskz8">type：只读，字符，事件类型。比如鼠标点击事件的类型：click，并被定义为常量：MouseEvent.CLICK</li>
</ul>
<br id="fpa7" />
构造函数：<br id="qm2v" />
Event(<br id="eclp" />
&nbsp; type:String,&nbsp;&nbsp;&nbsp; 事件类型<br id="eclp0" />
&nbsp; bubbles:Boolean = false,&nbsp;&nbsp; 是否冒泡<br id="eclp1" />
&nbsp; cancelable:Boolean = false&nbsp; 是否可以停止<br id="eclp2" />
)<br id="qm2v0" />
<br id="qm2v1" />
Event 的方法：<br id="qm2v2" />
</div>
<ul id="alan0">
    <li id="alan1">isDefaultPrevented：判断preventDefault 是否已经被调用<br id="fs65" />
    </li>
    <li id="alan2">preventDefault：停止事件的默认行为。针对一些系统事件，cancelable为true时才可用。</li>
    <li id="alan3">stopImmediatePropagation：停止当前的事件流传播，包括当前正在处理的对象</li>
    <li id="alan4">stopPropagation：停止当前的事件流传播，但不会停止当前正在处理的对象</li>
</ul>
<p>&nbsp;</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Xml代码 <a href="http://www.javaeye.com/topic/214780#" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" title="复制代码"></a></div>
</div>
<ol class="dp-xml" start="1">
    <li><span><span class="tag">&lt;?</span><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">"1.0"</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">"utf-8"</span><span class="tag">?&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span><span class="tag">&lt;</span><span class="tag-name">mx:Application</span><span>&nbsp;</span><span class="attribute">xmlns:mx</span><span>=</span><span class="attribute-value">"http://www.adobe.com/2006/mxml"</span><span>&nbsp;</span><span class="attribute">layout</span><span>=</span><span class="attribute-value">"absolute"</span><span>&nbsp;</span><span class="attribute">creationComplete</span><span>=</span><span class="attribute-value">"initApp()"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">mx:Style</span><span>&nbsp;</span><span class="attribute">source</span><span>=</span><span class="attribute-value">"style.css"</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">mx:Script</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="cdata">&lt;![CDATA[</span>&nbsp;</span></li>
    <li><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;flash.events.MouseEvent;</span>&nbsp;</span></li>
    <li><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>&nbsp;</span></li>
    <li><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;internal&nbsp;function&nbsp;initApp():void{</span>&nbsp;</span></li>
    <li><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;canvas_1.<span class="hilite2"><span class="hilite2">addEventListener</span></span>(MouseEvent.CLICK,CanvasHandler);</span>&nbsp;</span></li>
    <li><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;canvas_2.<span class="hilite2"><span class="hilite2">addEventListener</span></span>(MouseEvent.CLICK,CanvasHandler);</span>&nbsp;</span></li>
    <li><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;canvas_2.<span class="hilite2"><span class="hilite2">addEventListener</span></span>(MouseEvent.CLICK,pressBtn);</span>&nbsp;</span></li>
    <li><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;btn_1.<span class="hilite2"><span class="hilite2">addEventListener</span></span>(MouseEvent.CLICK,pressBtn);</span>&nbsp;</span></li>
    <li><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span>&nbsp;</span></li>
    <li><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;internal&nbsp;function&nbsp;output(msg:String):void{</span>&nbsp;</span></li>
    <li><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;debug_txt.text&nbsp;+=&nbsp;msg+"\n";</span>&nbsp;</span></li>
    <li><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span>&nbsp;</span></li>
    <li><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>&nbsp;</span></li>
    <li><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;internal&nbsp;function&nbsp;pressBtn(evt:MouseEvent):void{</span>&nbsp;</span></li>
    <li><span>&nbsp;</span></li>
    <li><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;output("是否冒泡--"+evt.bubbles);</span>&nbsp;</span></li>
    <li><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;output("目标对象--&nbsp;"+evt.target+"&nbsp;--&nbsp;"+evt.eventPhase);</span>&nbsp;</span></li>
    <li><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;output("遍历对象--&nbsp;"+evt.currentTarget);</span>&nbsp;</span></li>
    <li><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;output("------------");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>&nbsp;</span></li>
    <li><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span>&nbsp;</span></li>
    <li><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;internal&nbsp;function&nbsp;CanvasHandler(evt:MouseEvent):void{</span>&nbsp;</span></li>
    <li><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>&nbsp;</span></li>
    <li><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;output("目标对象--&nbsp;"+evt.currentTarget+"&nbsp;--&nbsp;"+evt.eventPhase);</span>&nbsp;</span></li>
    <li><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//停止事件流的传播</span>&nbsp;</span></li>
    <li><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;evt.stopImmediatePropagation();</span>&nbsp;</span></li>
    <li><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//evt.stopPropagation();</span>&nbsp;</span></li>
    <li><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span>&nbsp;</span></li>
    <li><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]]&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">mx:Script</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">mx:Canvas</span><span>&nbsp;</span><span class="attribute">id</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">"canvas_1"</span><span>&nbsp;</span><span class="attribute">styleName</span><span>=</span><span class="attribute-value">"box"</span><span>&nbsp;</span><span class="attribute">x</span><span>=</span><span class="attribute-value">"37"</span><span>&nbsp;</span><span class="attribute">y</span><span>=</span><span class="attribute-value">"63"</span><span>&nbsp;</span><span class="attribute">width</span><span>=</span><span class="attribute-value">"425"</span><span>&nbsp;</span><span class="attribute">height</span><span>=</span><span class="attribute-value">"160"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">mx:Text</span><span>&nbsp;</span><span class="attribute">x</span><span>=</span><span class="attribute-value">"13"</span><span>&nbsp;</span><span class="attribute">y</span><span>=</span><span class="attribute-value">"10"</span><span>&nbsp;</span><span class="attribute">text</span><span>=</span><span class="attribute-value">"Canvas_1"</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">mx:Canvas</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">"canvas_2"</span><span>&nbsp;</span><span class="attribute">styleName</span><span>=</span><span class="attribute-value">"box"</span><span>&nbsp;</span><span class="attribute">x</span><span>=</span><span class="attribute-value">"10"</span><span>&nbsp;</span><span class="attribute">y</span><span>=</span><span class="attribute-value">"52"</span><span>&nbsp;</span><span class="attribute">width</span><span>=</span><span class="attribute-value">"173"</span><span>&nbsp;</span><span class="attribute">height</span><span>=</span><span class="attribute-value">"90"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">mx:Text</span><span>&nbsp;</span><span class="attribute">x</span><span>=</span><span class="attribute-value">"10"</span><span>&nbsp;</span><span class="attribute">y</span><span>=</span><span class="attribute-value">"10"</span><span>&nbsp;</span><span class="attribute">text</span><span>=</span><span class="attribute-value">"Canvas_2"</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">mx:Button</span><span>&nbsp;</span><span class="attribute">id</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">"btn_1"</span><span>&nbsp;</span><span class="attribute">x</span><span>=</span><span class="attribute-value">"10"</span><span>&nbsp;</span><span class="attribute">y</span><span>=</span><span class="attribute-value">"38"</span><span>&nbsp;</span><span class="attribute">label</span><span>=</span><span class="attribute-value">"Button_1"</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">mx:Canvas</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">mx:Canvas</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">mx:TextArea</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">"debug_txt"</span><span>&nbsp;</span><span class="attribute">styleName</span><span>=</span><span class="attribute-value">"textBox"</span><span>&nbsp;</span><span class="attribute">x</span><span>=</span><span class="attribute-value">"37"</span><span>&nbsp;</span><span class="attribute">y</span><span>=</span><span class="attribute-value">"245"</span><span>&nbsp;</span><span class="attribute">height</span><span>=</span><span class="attribute-value">"198"</span><span>&nbsp;</span><span class="attribute">width</span><span>=</span><span class="attribute-value">"425"</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li><span><span class="tag">&lt;/</span><span class="tag-name">mx:Application</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre style="display: none;" name="code" class="xml">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="initApp()"&gt;
&lt;mx:Style source="style.css" /&gt;
&lt;mx:Script&gt;
&lt;![CDATA[
import flash.events.MouseEvent;
internal function initApp():void{
canvas_1.<span class="hilite2"><span class="hilite2">addEventListener</span></span>(MouseEvent.CLICK,CanvasHandler);
canvas_2.<span class="hilite2"><span class="hilite2">addEventListener</span></span>(MouseEvent.CLICK,CanvasHandler);
canvas_2.<span class="hilite2"><span class="hilite2">addEventListener</span></span>(MouseEvent.CLICK,pressBtn);
btn_1.<span class="hilite2"><span class="hilite2">addEventListener</span></span>(MouseEvent.CLICK,pressBtn);
}
internal function output(msg:String):void{
debug_txt.text += msg+"\n";
}
internal function pressBtn(evt:MouseEvent):void{
output("是否冒泡--"+evt.bubbles);
output("目标对象-- "+evt.target+" -- "+evt.eventPhase);
output("遍历对象-- "+evt.currentTarget);
output("------------");
}
internal function CanvasHandler(evt:MouseEvent):void{
output("目标对象-- "+evt.currentTarget+" -- "+evt.eventPhase);
//停止事件流的传播
evt.stopImmediatePropagation();
//evt.stopPropagation();
}
]]&gt;
&lt;/mx:Script&gt;
&lt;mx:Canvas id = "canvas_1" styleName="box" x="37" y="63" width="425" height="160"&gt;
&lt;mx:Text x="13" y="10" text="Canvas_1"/&gt;
&lt;mx:Canvas id="canvas_2" styleName="box" x="10" y="52" width="173" height="90"&gt;
&lt;mx:Text x="10" y="10" text="Canvas_2"/&gt;
&lt;mx:Button id = "btn_1" x="10" y="38" label="Button_1"/&gt;
&lt;/mx:Canvas&gt;
&lt;/mx:Canvas&gt;
&lt;mx:TextArea id="debug_txt" styleName="textBox" x="37" y="245" height="198" width="425"/&gt;
&lt;/mx:Application&gt;</pre>
<p>&nbsp;</p>
<p><strong id="cj3f10">8.2.3 侦听和响应事件--一个侦听键盘事件的例子</strong>
<br id="f:0m" />
</p>
<div id="f:0m0" style="margin-left: 40px;">要侦听一个事件，首先要创建一个函数来作为事件处理器，然后将这个函数注册给相应的时间类型。<br id="xoi9" />
this.<span class="hilite2"><span class="hilite2">addEventListener</span></span>(KeyboardEvent.KEY_DOWN,keyHandler);<br id="foxh" />
注册键盘按下事件，交给keyHandler处理，也可以在Application标签添加事件：<br id="arpa" />
keyDown="keyHandler(event)"&nbsp; 这种情况无法移除事件。<br id="zevr" />
<br id="zevr0" />
注册了事件监听器，使用完毕后，必须使用removeEcentListener 方法删除监听函数：<br id="zevr1" />
removeEcentListener(<br id="zevr2" />
&nbsp; type:String,&nbsp;&nbsp; 事件类型<br id="zevr3" />
&nbsp; listener:Function,&nbsp;&nbsp; 监听函数<br id="zevr4" />
&nbsp; useCapture:Boolean = false&nbsp;&nbsp;&nbsp; 是否开启捕获功能，如果注册时打开，移除也要打开。<br id="zevr5" />
)</div>
<div style="margin-left: 40px;"><br />
</div>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Xml代码 <a href="http://www.javaeye.com/topic/214780#" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" title="复制代码"></a></div>
</div>
<ol class="dp-xml" start="1">
    <li><span><span class="tag">&lt;?</span><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">"1.0"</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">"utf-8"</span><span class="tag">?&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span><span class="tag">&lt;</span><span class="tag-name">mx:Application</span><span>&nbsp;</span><span class="attribute">xmlns:mx</span><span>=</span><span class="attribute-value">"http://www.adobe.com/2006/mxml"</span><span>&nbsp;</span><span class="attribute">layout</span><span>=</span><span class="attribute-value">"absolute"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">creationComplete</span><span>=</span><span class="attribute-value">"initApp()"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">mx:Style</span><span>&nbsp;</span><span class="attribute">source</span><span>=</span><span class="attribute-value">"style.css"</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">mx:Script</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="cdata">&lt;![CDATA[</span>&nbsp;</span></li>
    <li><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;flash.events.KeyboardEvent;</span>&nbsp;</span></li>
    <li><span>&nbsp;</span></li>
    <li><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;internal&nbsp;function&nbsp;initApp():void{</span>&nbsp;</span></li>
    <li><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.<span class="hilite2"><span class="hilite2">addEventListener</span></span>(KeyboardEvent.KEY_DOWN,keyHandler);</span>&nbsp;</span></li>
    <li><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span>&nbsp;</span></li>
    <li><span>&nbsp;</span></li>
    <li><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;function&nbsp;keyHandler(e:KeyboardEvent):void{</span>&nbsp;</span></li>
    <li><span>&nbsp;</span></li>
    <li><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;str:String&nbsp;=&nbsp;"你按下的是:&nbsp;"+e.keyCode;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>&nbsp;</span></li>
    <li><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;debug_txt.text&nbsp;+=&nbsp;str&nbsp;+"\n";</span>&nbsp;</span></li>
    <li><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span>&nbsp;</span></li>
    <li><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]]&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">mx:Script</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">mx:TextArea</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">"debug_txt"</span><span>&nbsp;</span><span class="attribute">styleName</span><span>=</span><span class="attribute-value">"textBox"</span><span>&nbsp;</span><span class="attribute">x</span><span>=</span><span class="attribute-value">"25"</span><span>&nbsp;</span><span class="attribute">y</span><span>=</span><span class="attribute-value">"78"</span><span>&nbsp;</span><span class="attribute">height</span><span>=</span><span class="attribute-value">"198"</span><span>&nbsp;</span><span class="attribute">width</span><span>=</span><span class="attribute-value">"212"</span><span>&nbsp;</span><span class="attribute">editable</span><span>=</span><span class="attribute-value">"false"</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">mx:Text</span><span>&nbsp;</span><span class="attribute">x</span><span>=</span><span class="attribute-value">"25"</span><span>&nbsp;</span><span class="attribute">y</span><span>=</span><span class="attribute-value">"50"</span><span>&nbsp;</span><span class="attribute">text</span><span>=</span><span class="attribute-value">"按键盘上的任意键"</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span><span class="tag">&lt;/</span><span class="tag-name">mx:Application</span><span class="tag">&gt;</span><span>&nbsp; <br />
    </span></span></li>
</ol>
</div>
<img src ="http://www.blogjava.net/gembin/aggbug/223668.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gembin/" target="_blank">gembin</a> 2008-08-22 10:17 <a href="http://www.blogjava.net/gembin/archive/2008/08/22/223668.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Flex modules </title><link>http://www.blogjava.net/gembin/archive/2008/08/21/223522.html</link><dc:creator>gembin</dc:creator><author>gembin</author><pubDate>Thu, 21 Aug 2008 07:33:00 GMT</pubDate><guid>http://www.blogjava.net/gembin/archive/2008/08/21/223522.html</guid><wfw:comment>http://www.blogjava.net/gembin/comments/223522.html</wfw:comment><comments>http://www.blogjava.net/gembin/archive/2008/08/21/223522.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gembin/comments/commentRss/223522.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gembin/services/trackbacks/223522.html</trackback:ping><description><![CDATA[<p>This section describes modules and how they are used by modular applications.</p>
<h3><a style="width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif);" name="185495"></a>Subtopics</h3>
<dt><a href="http://livedocs.adobe.com/flex/201/html/modular_083_2.html#170590">About modules</a></dt>
<dt><a href="http://livedocs.adobe.com/flex/201/html/modular_083_2.html#171255">Benefits of modules</a></dt>
<dt><a href="http://livedocs.adobe.com/flex/201/html/modular_083_2.html#176523">Module API details</a></dt>
<dt><a href="http://livedocs.adobe.com/flex/201/html/modular_083_2.html#170591">Creating modular applications</a></dt>
<h2><a style="width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif);" name="170590"></a>About modules</h2>
<p><em>Modules</em> are SWF files that can be loaded and unloaded by an
application. They cannot be run independently of an application, but
any number of applications can share the modules.</p>
<p>Modules let you split your application into several pieces, or
modules. The main application, or shell, can dynamically load other
modules that it requires, when it needs them. It does not have to load
all modules when it starts, nor does it have to load any modules if the
user does not interact with them. When the application no longer needs
a module, it can unload the module to free up memory and resources.</p>
<p>Modular applications have the following benefits:</p>
<ul>
    <li>Smaller initial download size of the SWF file.</li>
    <li>Shorter load time due to smaller SWF file size.</li>
    <li>Better
    encapsulation of related aspects of an application. For example, a
    "reporting" feature can be separated into a module that you can then
    work on independently.</li>
</ul>
<h2><a style="width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif);" name="171255"></a>Benefits of modules</h2>
<p>Modules are similar to Runtime Shared Libraries (RSLs) in that they
separate code from an application into separately loaded SWF files.
Modules are much more flexible than RSLs because modules can be loaded
and unloaded at run time and compiled without the application.</p>
<p>Two common scenarios in which using modules is beneficial are a
large application with different user paths and a portal application.</p>
<p>An example of the first common scenario is an enormous insurance
application that includes thousands of screens, for life insurance, car
insurance, health insurance, dental insurance, travel insurance, and
veterinary pet insurance. </p>
<p>Using a traditional approach to rich Internet application (RIA)
design, you might build a monolithic application with a hierarchical
tree of MXML classes. Memory use and start-up time for the application
would be significant, and the SWF file size would grow with each new
set of functionality. </p>
<p>When using this application, however, any user accesses only a
subset of the screens. By refactoring the screens into small groups of
modules that are loaded on demand, you can improve the perceived
performance of the main application and reduce the memory use. Also,
when the application is separated into modules, developers'
productivity may increase due to better encapsulation of design. When
rebuilding the application, the developers also have to recompile only
the single module instead of the entire application. </p>
<p>An example of the second common scenario is a system with a main
portal application, written in ActionScript 3, that provides services
for numerous portlets. Portlets are configured based on data that is
downloaded on a per-user basis. Using the traditional approach, you
might build an application that compiles in all known portlets. This is
inefficient, both for deployment and development.</p>
<p>By using modules, you can establish an interface that contains
portal services, and a generic portlet interface. You can use XML data
to determine which modules to load for a given session. When the module
is loaded, you obtain a handle to a class factory inside the module,
and from that you create an instance of a class that implements the
portlet interface. In this scenario, full recompilation is necessary
only if the interfaces change.</p>
<h2><a style="width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif);" name="176523"></a>Module API details</h2>
<p>Modules implement a class factory with a standard interface. The
product of that class factory implements an interface known to the
shell, or the shell implements an interface known to the modules. </p>
<p>By using shared interface definitions, these shared interfaces
reduce hard dependencies between the shell and the module. This
provides type-safe communication and enforces an abstraction layer
without adding significantly to the SWF file size.</p>
<p>The following image shows the relationship between the shell and the module's interfaces:</p>
<p>&nbsp;</p>
<p><br />
<img src="http://livedocs.adobe.com/flex/201/html/images/ModuleDiagram.jpg" alt="Relationship between shell application and the module's interfaces." vspace="0" border="0" hspace="0" />
<br />
</p>
<h2><a style="width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif);" name="170591"></a>Creating modular applications</h2>
<p>To create a modular application, you create separate classes for each module, plus an application that loads the modules.</p>
<h4>To create a modular application:</h4>
<ol>
    <li>Create any number of modules. An MXML-based module file's root tag is <code>&lt;mx:Module&gt;</code>. ActionScript-based modules extend the ModuleBase class.</li>
    <li>Compile
    each module as if it were an application. You can do this by using the
    mxmlc command-line compiler or the compiler built into Adobe Flex
    Builder.</li>
    <li>Create an Application class. This is typically an MXML file whose root tag is <code>&lt;mx:Application&gt;</code>, but it can also be an ActionScript-only application.</li>
    <li>In the Application file, use an <code>&lt;mx:ModuleLoader&gt;</code> tag to load each of the modules. You can also do this by using the <code>load()</code>
    method of the mx.modules.ModuleLoader class. For classes that extend
    ModuleBase, you should use the methods of the ModuleManager class to
    load them.</li>
</ol>
<p>The following sections describes these steps in detail.</p>
<p><br />
</p>
<h1>Creating modules</h1>
<p>Modules are classes just like application files. To create a module
in ActionScript, you create a file that extends the
mx.modules.ModuleBase class. To create a module in MXML, you extend the
mx.modules.Module class by creating a file whose root tag is <code>&lt;mx:Module&gt;</code>.
In that tag, ensure that you add any namespaces that are used in that
module. You should also include a type declaration tag at the beginning
of the file.</p>
<p>The following example is a module that includes a Chart control:</p>
<div class="listing">
<pre>&lt;?xml version="1.0"?&gt;<br />
&lt;!-- modules/ColumnChartModule.mxml --&gt;<br />
&lt;mx:Module xmlns:mx="http://www.adobe.com/2006/mxml" width="100%" height="100%" &gt;<br />
&lt;mx:Script&gt;&lt;![CDATA[<br />
import mx.collections.ArrayCollection;<br />
[Bindable]<br />
public var expenses:ArrayCollection = new ArrayCollection([<br />
{Month:"Jan", Profit:2000, Expenses:1500},<br />
{Month:"Feb", Profit:1000, Expenses:200},<br />
{Month:"Mar", Profit:1500, Expenses:500}<br />
]);<br />
]]&gt;&lt;/mx:Script&gt;<br />
&lt;mx:ColumnChart id="myChart" dataProvider="{expenses}"&gt;<br />
&lt;mx:horizontalAxis&gt;<br />
&lt;mx:CategoryAxis <br />
dataProvider="{expenses}" <br />
categoryField="Month"<br />
/&gt;<br />
&lt;/mx:horizontalAxis&gt;<br />
&lt;mx:series&gt;<br />
&lt;mx:ColumnSeries <br />
xField="Month" <br />
yField="Profit" <br />
displayName="Profit"<br />
/&gt;<br />
&lt;mx:ColumnSeries <br />
xField="Month" <br />
yField="Expenses" <br />
displayName="Expenses"<br />
/&gt;<br />
&lt;/mx:series&gt;<br />
&lt;/mx:ColumnChart&gt;<br />
&lt;mx:Legend dataProvider="{myChart}"/&gt;<br />
&lt;/mx:Module&gt;<br />
<br />
</pre>
<h1>Compiling modules</h1>
<p>You compile the module as you would compile any Flex application
using the mxmlc command-line compiler or the Flex Builder compiler. The
following command is the simplest mxmlc command:</p>
<div class="listing">
<pre>mxmlc MyModule.mxml<br />
</pre>
</div>
<p>The result is a SWF file that you load into your application
as a module. You cannot run the module-based SWF file as a stand-alone
Flash application or load it into a browser window. It must be loaded
by an application as a module.</p>
<h3><a style="width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif);" name="185531"></a>Subtopics</h3>
<dt><a href="http://livedocs.adobe.com/flex/201/html/modular_083_4.html#173886">Controlling module size</a></dt>
<dt><a href="http://livedocs.adobe.com/flex/201/html/modular_083_4.html#172772">Recompiling modules</a></dt>
<h2><a style="width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif);" name="173886"></a>Controlling module size</h2>
<p>Module size varies based on the components and classes that are used
in the module. By default, a module includes all framework code that
its components depend on, which can cause modules to be large by
linking classes that overlap with the application's classes.</p>
<p>To reduce the size of the modules, you can instruct the module to
externalize classes that are included by the application. This includes
custom classes and framework classes. The result is that the module
only includes the classes it requires, while the framework code and
other dependencies are included in the application. </p>
<p>To externalize framework classes, you generate a linker report from
the application that loads the modules, by using mxmlc commands. You
then use this report as input to the module's <code>load-externs</code> compiler option. </p>
<h4>To create a linker report:</h4>
<ol>
    <li>Generate the linker report:
    <div class="listing">
    <pre>mxmlc -link-report=report.xml MyApplication.mxml<br />
    </pre>
    </div>
    </li>
    <li>Compile the application SWF file:
    <div class="listing">
    <pre>mxmlc MyApplication.mxml<br />
    </pre>
    </div>
    </li>
    <li>Compile the module:
    <div class="listing">
    <pre>mxmlc -load-externs=report.xml MyModule.mxml<br />
    </pre>
    </div>
    </li>
</ol>
<h2><a style="width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif);" name="172772"></a>Recompiling modules</h2>
<p>You must recompile the modules if you make changes. Recompiling the
main application does not trigger a recompilation of the modules.
Similarly, if you change the application file, you do not have to
recompile the modules, unless you make changes that might affect the
linker report or common code. </p>
<table class="notesidebar" border="0" cellpadding="0" cellspacing="0">
    <tbody>
        <tr>
            <td width="5">
            <p><strong>NOTE</strong></p>
            </td>
            <td width="1">
            <p>&nbsp;</p>
            </td>
            <td>
            <p>If you externalize the module's dependencies by using the <code>load-externs</code>
            option, your module might not be compatible with future versions of
            Adobe Flex. You might be required to recompile the module. To ensure
            that a future Flex application can use a module, compile that module
            with all the classes it requires. This also applies to applications
            that you load inside other applications.</p>
            </td>
        </tr>
    </tbody>
</table>
<pre><br />
</pre>
</div>
<p>MXML-based modules can load other modules. Those modules can load other modules, and so on.</p>
<h1>Loading and unloading modules</h1>
<p>To load and unload modules you use the <code>load()</code> and <code>unload()</code>
methods of the ModuleLoader class. These methods take no parameters;
the ModuleLoader loads or unloads the module that matches the value of
the current <code>url</code> property.</p>
<p>The following example loads and unloads the module when you click the button:</p>
<div class="listing">
<pre>&lt;?xml version="1.0"?&gt;<br />
&lt;!-- modules/ASModuleLoaderApp.mxml --&gt;<br />
&lt;mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"&gt;<br />
&lt;mx:Script&gt;<br />
&lt;![CDATA[<br />
import mx.modules.*;<br />
<br />
public function createModule(m:ModuleLoader, s:String):void {<br />
if (!m.url) {<br />
m.url = s;<br />
return;<br />
}<br />
m.loadModule();<br />
}<br />
<br />
public function removeModule(m:ModuleLoader):void {<br />
m.unloadModule();<br />
}<br />
]]&gt;<br />
&lt;/mx:Script&gt;<br />
<br />
&lt;mx:Panel title="Module Example" <br />
height="90%" <br />
width="90%" <br />
paddingTop="10" <br />
paddingLeft="10" <br />
paddingRight="10" <br />
paddingBottom="10"<br />
&gt;<br />
&lt;mx:TabNavigator id="tn" <br />
width="100%" <br />
height="100%" <br />
creationPolicy="auto"<br />
&gt;<br />
&lt;mx:VBox id="vb1" label="Column Chart Module"&gt;                <br />
&lt;mx:Button <br />
label="Load" <br />
click="createModule(chartModuleLoader, l1.text)"<br />
/&gt;<br />
&lt;mx:Button <br />
label="Unload" <br />
click="removeModule(chartModuleLoader)"<br />
/&gt;<br />
&lt;mx:Label id="l1" text="ColumnChartModule.swf"/&gt;<br />
&lt;mx:ModuleLoader id="chartModuleLoader"/&gt;                                <br />
&lt;/mx:VBox&gt;<br />
<br />
&lt;mx:VBox id="vb2" label="Form Module"&gt;<br />
&lt;mx:Button <br />
label="Load" <br />
click="createModule(formModuleLoader, l2.text)"<br />
/&gt;<br />
&lt;mx:Button <br />
label="Unload" <br />
click="removeModule(formModuleLoader)"<br />
/&gt;<br />
&lt;mx:Label id="l2" text="FormModule.swf"/&gt;<br />
&lt;mx:ModuleLoader id="formModuleLoader"/&gt;<br />
&lt;/mx:VBox&gt;<br />
&lt;/mx:TabNavigator&gt;<br />
&lt;/mx:Panel&gt;<br />
&lt;/mx:Application&gt;<br />
</pre>
</div>
<p>Setting the location of a ModuleLoader triggers a call to the <code>loadModule()</code> method, too. This occurs when you first create a ModuleLoader with the <code>url</code> property set. It also occurs if you change the value of that property. </p>
<p>The following example loads the modules without calling the <code>loadModule()</code> method because the <code>url</code> property is set on the <code>&lt;mx:ModuleLoader&gt;</code> tags:</p>
<div class="listing">
<pre>&lt;?xml version="1.0"?&gt;<br />
&lt;!-- modules/URLModuleLoaderApp.mxml --&gt;<br />
&lt;mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"&gt;<br />
&lt;mx:Panel <br />
title="Module Example" <br />
height="90%" <br />
width="90%" <br />
paddingTop="10" <br />
paddingLeft="10" <br />
paddingRight="10" <br />
paddingBottom="10"<br />
&gt;<br />
<br />
&lt;mx:Label width="100%" color="blue"<br />
text="Select the tabs to change the panel."/&gt;<br />
<br />
&lt;mx:TabNavigator id="tn"<br />
width="100%" <br />
height="100%" <br />
creationPolicy="auto"<br />
&gt;<br />
&lt;mx:VBox id="vb1" label="Column Chart Module"&gt;<br />
&lt;mx:Label id="l1" text="ColumnChartModule.swf"/&gt;<br />
&lt;mx:ModuleLoader url="ColumnChartModule.swf"/&gt;<br />
&lt;/mx:VBox&gt;<br />
<br />
&lt;mx:VBox id="vb2" label="Form Module"&gt;<br />
&lt;mx:Label id="l2" text="FormModule.swf"/&gt;<br />
&lt;mx:ModuleLoader url="FormModule.swf"/&gt;<br />
&lt;/mx:VBox&gt;<br />
<br />
&lt;/mx:TabNavigator&gt;<br />
&lt;/mx:Panel&gt;<br />
&lt;/mx:Application&gt;<br />
</pre>
</div>
<p>When you load a module, Flex ensures that there is only one copy of a module loaded, no matter how many times you call the <code>load()</code> method for that module. </p>
<p>Modules are loaded into the child of the current application domain.
You can specify a different application domain by using the <code>applicationDomain</code> property of the ModuleLoader class.</p>
<p>When two classes of the same name but different implementations are loaded, the first one loaded is the one that is used.</p>
<h3><a style="width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif);" name="185551"></a>Subtopics</h3>
<dt><a href="http://livedocs.adobe.com/flex/201/html/modular_083_5.html#172500">Loading modules from different servers</a></dt>
<h2><a style="width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif);" name="172500"></a>Loading modules from different servers</h2>
<p>To load a module from one server into an application running on a
different server, you must establish a trust between the module and the
application that loads it. </p>
<h4>To allow access across domains:</h4>
<ol>
    <li>In your loading application, you must call the <code>allowDomain()</code>
    method and specify the target domain from which you load a module. So,
    specify the target domain in the preinitialize event handler of your
    application to ensure that the application is set up before the module
    is loaded. </li>
    <li>In the cross-domain file of the remote server
    where your module is, add an entry that specifies the server on which
    the loading application is running.</li>
    <li>Load the cross-domain file on the remote server in the preinitialize event handler of your loading application. </li>
    <li>In the loaded module, call the <code>allowDomain()</code> method so that it can communicate with the loader. </li>
</ol>
<p>The following example shows the <code>init()</code> method of the loading application:</p>
<div class="listing">
<pre>public function setup():void {<br />
Security.allowDomain("remoteservername");<br />
Security.loadPolicyFile("http://remoteservername/crossdomain.xml");<br />
var request:URLRequest = new URLRequest("http://remoteservername<br />
/crossdomain.xml");<br />
var loader:URLLoader = new URLLoader();<br />
loader.load(request);<br />
}<br />
</pre>
</div>
<p>The following example shows the loaded module's <code>init()</code> method:</p>
<div class="listing">
<pre>public function initMod():void {<br />
Security.allowDomain("loaderservername");<br />
}<br />
</pre>
</div>
<p>The following example shows the cross-domain file that resides on the remote server:</p>
<div class="listing">
<pre>&lt;!-- crossdomain.xml file located at the root of the server --&gt;<br />
&lt;cross-domain-policy&gt;<br />
&lt;allow-access-from domain="loaderservername" to-ports="*"/&gt;<br />
&lt;/cross-domain-policy&gt;<br />
</pre>
</div>
<p>For more information about using the cross-domain policy file, see <a href="http://livedocs.adobe.com/flex/201/html/security2_117_01.html#137544">Applying Flex Security</a> in <em>B</em><em>uilding and Deploying Flex&nbsp;2 Applications</em>.</p>
<h1>Using ModuleLoader events</h1>
<p>The ModuleLoader class triggers several events, including <code>setup</code>, <code>ready</code>, <code>loading</code>, <code>unload</code>, <code>progress</code>, <code>error</code>, and <code>urlChanged</code>.
You can use these events to track the progress of the loading process,
and find out when a module has been unloaded or when the ModuleLoader's
target URL has changed.</p>
<h3><a style="width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif);" name="185566"></a>Subtopics</h3>
<dt><a href="http://livedocs.adobe.com/flex/201/html/modular_083_6.html#170964">Using the error event</a></dt>
<dt><a href="http://livedocs.adobe.com/flex/201/html/modular_083_6.html#170968">Using the progress event</a></dt>
<h2><a style="width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif);" name="170964"></a>Using the error event</h2>
<p>The <code>error</code> event gives you an opportunity to gracefully
fail when a module does not load for some reason. In the following
example, you can load and unload a module by using the Button controls.
To trigger an <code>error</code> event, change the URL in the
TextInput control to a module that does not exist. The error handler
displays a message to the user and writes the error message to the
trace log.</p>
<p class="style1">Revision 1/10/2007: Minor change to createModule() method.</p>
<div class="listing">
<pre>&lt;?xml version="1.0"?&gt;<br />
&lt;!-- modules/ErrorEventHandler.mxml --&gt;<br />
&lt;mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"&gt;<br />
&lt;mx:Script&gt;<br />
&lt;![CDATA[<br />
import mx.events.ModuleEvent;<br />
import mx.modules.*;<br />
import mx.controls.Alert;<br />
<br />
private function errorHandler(e:ModuleEvent):void {<br />
Alert.show("There was an error loading the module." + <br />
" Please contact the Help Desk.");<br />
trace(e.errorText);<br />
}<br />
<br />
public function createModule():void {<br />
if (chartModuleLoader.url == ti1.text) {<br />
// If they are the same, call loadModule.   <br />
chartModuleLoader.loadModule();<br />
} else {<br />
// If they are not the same, then change the url, <br />
// which triggers a call to the loadModule() method.<br />
chartModuleLoader.url = ti1.text;<br />
}<br />
}<br />
<br />
public function removeModule():void {<br />
chartModuleLoader.unloadModule();<br />
}<br />
<br />
]]&gt;<br />
&lt;/mx:Script&gt;<br />
<br />
&lt;mx:Panel title="Module Example" <br />
height="90%" <br />
width="90%" <br />
paddingTop="10" <br />
paddingLeft="10" <br />
paddingRight="10" <br />
paddingBottom="10"<br />
&gt;<br />
&lt;mx:HBox&gt;<br />
&lt;mx:Label text="URL:"/&gt;<br />
&lt;mx:TextInput width="200" id="ti1" text="ColumnChartModule.swf"/&gt;<br />
&lt;mx:Button label="Load" click="createModule()"/&gt;<br />
&lt;mx:Button label="Unload" click="removeModule()"/&gt;<br />
&lt;/mx:HBox&gt;<br />
&lt;mx:ModuleLoader id="chartModuleLoader" error="errorHandler(event)"/&gt;<br />
&lt;/mx:Panel&gt;<br />
&lt;/mx:Application&gt;<br />
</pre>
</div>
<h2><a style="width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif);" name="170968"></a>Using the progress event</h2>
<p>You can use the <code>progress</code> event to track the progress of a module as it loads. When you add a listener for the <code>progress</code>
event, Flex calls that listener at regular intervals during the
module's loading process. Each time the listener is called, you can
look at the <code>bytesLoaded</code> property of the event. You can compare this to the <code>bytesTotal</code> property to get a percentage of completion.</p>
<p>The following example reports the level of completion during the
module's loading process. It also produces a simple progress bar that
shows users how close the loading is to being complete.</p>
<div class="listing">
<pre>&lt;?xml version="1.0"?&gt;<br />
&lt;!-- modules/SimpleProgressEventHandler.mxml --&gt;<br />
&lt;mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"&gt;<br />
&lt;mx:Script&gt;<br />
&lt;![CDATA[<br />
import mx.events.ModuleEvent;<br />
import flash.events.ProgressEvent;<br />
import mx.modules.*;<br />
<br />
[Bindable]<br />
public var progBar:String = "";<br />
[Bindable]<br />
public var progMessage:String = "";<br />
<br />
private function progressEventHandler(e:ProgressEvent):void {<br />
progBar += ".";<br />
progMessage = <br />
"Module " +  <br />
Math.round((e.bytesLoaded/e.bytesTotal) * 100) + <br />
"% loaded";<br />
}<br />
<br />
public function createModule():void {<br />
chartModuleLoader.loadModule();<br />
}<br />
<br />
public function removeModule():void {<br />
chartModuleLoader.unloadModule();<br />
progBar = "";<br />
progMessage = "";<br />
}<br />
]]&gt;<br />
&lt;/mx:Script&gt;<br />
<br />
&lt;mx:Panel title="Module Example" <br />
height="90%" <br />
width="90%" <br />
paddingTop="10" <br />
paddingLeft="10" <br />
paddingRight="10" <br />
paddingBottom="10"<br />
&gt;        <br />
&lt;mx:HBox&gt;<br />
&lt;mx:Label id="l2" text="{progMessage}"/&gt;<br />
&lt;mx:Label id="l1" text="{progBar}"/&gt;<br />
&lt;/mx:HBox&gt;  <br />
<br />
&lt;mx:Button label="Load" click="createModule()"/&gt;<br />
&lt;mx:Button label="Unload" click="removeModule()"/&gt;<br />
<br />
&lt;mx:ModuleLoader <br />
id="chartModuleLoader" <br />
url="ColumnChartModule.swf" <br />
progress="progressEventHandler(event)"<br />
/&gt;<br />
&lt;/mx:Panel&gt;    <br />
&lt;/mx:Application&gt;<br />
</pre>
</div>
<p>You can also connect a module loader to a ProgressBar control.
The following example creates a custom component for the ModuleLoader
that includes a ProgressBar control. The ProgressBar control displays
the progress of the module loading. </p>
<div class="listing">
<pre>&lt;?xml version="1.0"?&gt;<br />
&lt;!-- modules/MySimpleModuleLoader.mxml --&gt;<br />
&lt;mx:ModuleLoader xmlns:mx="http://www.adobe.com/2006/mxml"&gt;<br />
&lt;mx:Script&gt;<br />
&lt;![CDATA[        <br />
private function clickHandler():void {<br />
if (!url) { <br />
url="ColumnChartModule.swf"; <br />
} <br />
loadModule();<br />
}        <br />
]]&gt;<br />
&lt;/mx:Script&gt;<br />
<br />
&lt;mx:ProgressBar <br />
id="progress" <br />
width="100%" <br />
source="{this}"<br />
/&gt;<br />
&lt;mx:HBox width="100%"&gt;<br />
&lt;mx:Button <br />
id="load" <br />
label="Load" <br />
click="clickHandler()"<br />
/&gt;<br />
&lt;mx:Button <br />
id="unload" <br />
label="Unload" <br />
click="unloadModule()"<br />
/&gt;<br />
&lt;mx:Button <br />
id="reload" <br />
label="Reload" <br />
click="unloadModule();loadModule();"<br />
/&gt;<br />
&lt;/mx:HBox&gt;<br />
&lt;/mx:ModuleLoader&gt;<br />
</pre>
</div>
<p>You can use this module in a simple application, as the following example shows:</p>
<div class="listing">
<pre>&lt;?xml version="1.0"?&gt;<br />
&lt;!-- modules/ComplexProgressEventHandler.mxml --&gt;<br />
&lt;mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:local="*"&gt;<br />
<br />
&lt;mx:Panel title="Module Example" <br />
height="90%" <br />
width="90%" <br />
paddingTop="10" <br />
paddingLeft="10" <br />
paddingRight="10" <br />
paddingBottom="10"<br />
&gt;        <br />
&lt;mx:Label text="Use the buttons below to load and unload    <br />
the module."/&gt;<br />
&lt;local:MySimpleModuleLoader id="customLoader"/&gt;<br />
&lt;/mx:Panel&gt;<br />
<br />
&lt;/mx:Application&gt;<br />
</pre>
</div>
<p>This example does not change the ProgressBar's <code>label</code> property for all events. For example, if you load and then unload the module, the <code>label</code>
property remains at "LOADING 100%". To adjust the label properly, you
must define other event handlers for the ModuleLoader events, such as <code>unload</code> and <code>error</code>. </p>
<img src ="http://www.blogjava.net/gembin/aggbug/223522.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gembin/" target="_blank">gembin</a> 2008-08-21 15:33 <a href="http://www.blogjava.net/gembin/archive/2008/08/21/223522.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Top 10 Adobe Flex Misconceptions</title><link>http://www.blogjava.net/gembin/archive/2008/08/15/222221.html</link><dc:creator>gembin</dc:creator><author>gembin</author><pubDate>Fri, 15 Aug 2008 05:30:00 GMT</pubDate><guid>http://www.blogjava.net/gembin/archive/2008/08/15/222221.html</guid><wfw:comment>http://www.blogjava.net/gembin/comments/222221.html</wfw:comment><comments>http://www.blogjava.net/gembin/archive/2008/08/15/222221.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gembin/comments/commentRss/222221.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gembin/services/trackbacks/222221.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/gembin/archive/2008/08/15/222221.html'>阅读全文</a><img src ="http://www.blogjava.net/gembin/aggbug/222221.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gembin/" target="_blank">gembin</a> 2008-08-15 13:30 <a href="http://www.blogjava.net/gembin/archive/2008/08/15/222221.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Flex in a Week(study...)</title><link>http://www.blogjava.net/gembin/archive/2008/08/14/222015.html</link><dc:creator>gembin</dc:creator><author>gembin</author><pubDate>Thu, 14 Aug 2008 07:16:00 GMT</pubDate><guid>http://www.blogjava.net/gembin/archive/2008/08/14/222015.html</guid><wfw:comment>http://www.blogjava.net/gembin/comments/222015.html</wfw:comment><comments>http://www.blogjava.net/gembin/archive/2008/08/14/222015.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gembin/comments/commentRss/222015.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gembin/services/trackbacks/222015.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: studying flex in a week.....&nbsp;&nbsp;<a href='http://www.blogjava.net/gembin/archive/2008/08/14/222015.html'>阅读全文</a><img src ="http://www.blogjava.net/gembin/aggbug/222015.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gembin/" target="_blank">gembin</a> 2008-08-14 15:16 <a href="http://www.blogjava.net/gembin/archive/2008/08/14/222015.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一篇比较全面的Flash＆Flex相关技术资源大全(转)</title><link>http://www.blogjava.net/gembin/archive/2008/08/12/221473.html</link><dc:creator>gembin</dc:creator><author>gembin</author><pubDate>Tue, 12 Aug 2008 05:32:00 GMT</pubDate><guid>http://www.blogjava.net/gembin/archive/2008/08/12/221473.html</guid><wfw:comment>http://www.blogjava.net/gembin/comments/221473.html</wfw:comment><comments>http://www.blogjava.net/gembin/archive/2008/08/12/221473.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/gembin/comments/commentRss/221473.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gembin/services/trackbacks/221473.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Flash＆Flex相关技术资源大全&nbsp;&nbsp;<a href='http://www.blogjava.net/gembin/archive/2008/08/12/221473.html'>阅读全文</a><img src ="http://www.blogjava.net/gembin/aggbug/221473.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gembin/" target="_blank">gembin</a> 2008-08-12 13:32 <a href="http://www.blogjava.net/gembin/archive/2008/08/12/221473.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>