﻿<?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-一半是火焰，一半是海水</title><link>http://www.blogjava.net/wangle/</link><description /><language>zh-cn</language><lastBuildDate>Tue, 28 Apr 2026 18:59:11 GMT</lastBuildDate><pubDate>Tue, 28 Apr 2026 18:59:11 GMT</pubDate><ttl>60</ttl><item><title>一点感悟</title><link>http://www.blogjava.net/wangle/archive/2008/08/15/222311.html</link><dc:creator>雁过无痕</dc:creator><author>雁过无痕</author><pubDate>Fri, 15 Aug 2008 09:40:00 GMT</pubDate><guid>http://www.blogjava.net/wangle/archive/2008/08/15/222311.html</guid><wfw:comment>http://www.blogjava.net/wangle/comments/222311.html</wfw:comment><comments>http://www.blogjava.net/wangle/archive/2008/08/15/222311.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangle/comments/commentRss/222311.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangle/services/trackbacks/222311.html</trackback:ping><description><![CDATA[<p>这两天遇到的一些问题，引起的一些思考，觉得有必要写下来。<br />
一. 面向对象的API接口设计，如何做到向后兼容。一个软件存在多个模块，如果提供基础API的模块变化了，那么依赖于它的应用模块都必须重新编译和部署。这就对基础API模块的向后兼容性提出了要求。完全通用的方法是不存在的，任何方法都需要根据实际情况调整，这里仅仅提供一些比较通用但是也不明确的方法：<br />
方法一：扩展时对象只增加方法和属性，原有的属性和方法保留。这对于c++等基于二进制对象布局的方法在使用时需要非常小心，否则极易引起内存访问违规。但是对于ActionScript基于元数据的语言来说，这一方法一般不会有什么问题。对于Java的情况不是非常清楚，估计与actionscript情况差不多。<br />
方法二：增加新的对象（使用继承）提供扩展功能，原来的对象保留。不过对于耦合的类关系，只增加一个类往往并不能达到目的。<br />
<br />
这里必须注意的一点是，API提供者与API使用者保持单向依赖的关系，API不应该依赖于具体的应用。对于多模块的软件来说架构最重要的是两点：<br />
1. 从需求中抽象出API，并且将API的开发交给素质较高的人员，而应用之间松散耦合，通过API发生关系。<br />
2. API本身空间也要做划分，将之切割成为正交的空间，这样API扩展时，影响控制在局部。<br />
<br />
<br />
顺便说说向前兼容的问题，这要求新的Client兼容老的API，这在API设计中很少碰到，但是在设计软件的文档存储格式（Save/Load）时常常遇到，这要求新的应用在开发时，做判断，判断属性不存在时应该如何处理，也就是提供一个默认值。<br />
<br />
对于其它的Server-Client结构，比如WebService的扩展，XML扩展等等，我想也应该有类似的方法。所以我也想去看看一些公开的API接口是如何设计和扩展的，比如FaceBook，不过说到底还是抽象与空间划分的问题，而这些并没有通用的方法，都依赖于具体的需求。<br />
<br />
二. 面向接口的设计实际上就是合理的划分对象空间。对于对象在扩展时，我们常常会发现并没有办法把它划分成树状的类关系，常常我们发现从一个类A派生了两个类B和C，但是又存在第三种情况，它的行为包含部分B的行为也包含部分C的行为。实际上类的空间划分，和数据库设计是一样的，每一次划分（继承）相当于以一个索引划分对象空间，但是很多时候划分有多个索引，这时候要想划分成单一的一棵树是不可能的。这时候就需要进一步细化对象的空间划分，并将之划分为正交的多个空间。举个例子：Window派生出TransparentWindow和OpaqueWindow，这是一种划分，但是我们又发现另一种划分，WindowWithTitleBar与WindowWithoutTitleBar，他们都是对Window的划分。这时候我们应该想到的是，Window可以拆分为：ITitleBar, IMainWindow，各种Window可以选择实现或者不实现这些接口。当第三者使用这些对象时，直接访问接口即可，因为其它的接口可能是他们并不关心的。当存在多种索引时，将对象拆分为正交的空间，每一个空间尤其自己的单一索引，这应该是对象划分的一种通用原则。就像单根继承一样，这样会使得对象的划分结构非常清晰。<br />
对于某些不是特别复杂的情况，如果存在多种划分索引，不妨用单一的类表示全部的对象，对某些对象，某些属性方法是无效的，这样实际上在简单情况下是很有效的，因为过度的划分会造成复杂性，使用者可能不知道在哪个对象上找到他需要的属性或方法了，这就好像在一张表上设计了全部的属性，尽管有些属性是抵触的，有些属性是相关的。随着不断的扩展，这张表会越来越大，这就需要开始对对象空间做划分了，所以说到底，还是一个需求复杂度的问题，这里最重要的是掌握一个划分的度，何时划分，划分到什么程度，决定这些的往往不仅仅是技术因素，还有商业上，运营上，时间上，成本上的因素，这也是最难判断的一点，需要在实际中去具体问题具体分析，这里就能体现经验的重要性了，其实在架构上方法都是很Genralized的，这些和实现一个具体的算法大部相同，所以设计模式都在讲模式一定有其上下文，也是这个道理吗<br />
<br />
胡扯了很多，先到这里吧，等有时间做进一步的整理<br />
</p>
<img src ="http://www.blogjava.net/wangle/aggbug/222311.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangle/" target="_blank">雁过无痕</a> 2008-08-15 17:40 <a href="http://www.blogjava.net/wangle/archive/2008/08/15/222311.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>国内的Flex资源</title><link>http://www.blogjava.net/wangle/archive/2008/02/28/182712.html</link><dc:creator>雁过无痕</dc:creator><author>雁过无痕</author><pubDate>Thu, 28 Feb 2008 08:12:00 GMT</pubDate><guid>http://www.blogjava.net/wangle/archive/2008/02/28/182712.html</guid><wfw:comment>http://www.blogjava.net/wangle/comments/182712.html</wfw:comment><comments>http://www.blogjava.net/wangle/archive/2008/02/28/182712.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangle/comments/commentRss/182712.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangle/services/trackbacks/182712.html</trackback:ping><description><![CDATA[AnyFlex<br />
RIAchina<br />
RXNA类似国外的mxna)<br />
Flex搜索引擎计划：<a href="http://blog.eshangrao.com/index.php/2007/02/27/352-googleflex">http://blog.eshangrao.com/index.php/2007/02/27/352-googleflex</a><br />
Flex Wiki计划：<a href="http://blog.eshangrao.com/index.php/2007/05/12/390-flexwikiflex">http://blog.eshangrao.com/index.php/2007/05/12/390-flexwikiflex</a><br />
RIAmeeting：<a href="http://www.riameeting.cn/">http://www.riameeting.cn/</a><br />
<br />
Flex对于信息发布类网站不一定有效，但交互性要求很高的社区类网站就很合适
<img src ="http://www.blogjava.net/wangle/aggbug/182712.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangle/" target="_blank">雁过无痕</a> 2008-02-28 16:12 <a href="http://www.blogjava.net/wangle/archive/2008/02/28/182712.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>竹林深处宽屏壁纸</title><link>http://www.blogjava.net/wangle/archive/2008/02/27/182534.html</link><dc:creator>雁过无痕</dc:creator><author>雁过无痕</author><pubDate>Wed, 27 Feb 2008 10:45:00 GMT</pubDate><guid>http://www.blogjava.net/wangle/archive/2008/02/27/182534.html</guid><wfw:comment>http://www.blogjava.net/wangle/comments/182534.html</wfw:comment><comments>http://www.blogjava.net/wangle/archive/2008/02/27/182534.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangle/comments/commentRss/182534.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangle/services/trackbacks/182534.html</trackback:ping><description><![CDATA[http://www.aar.cn/wallpaper/Desktop/Natural/2150/F_WQTP_1680x1050_Q.Html
<img src ="http://www.blogjava.net/wangle/aggbug/182534.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangle/" target="_blank">雁过无痕</a> 2008-02-27 18:45 <a href="http://www.blogjava.net/wangle/archive/2008/02/27/182534.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Flex SDK Open Source Site Online</title><link>http://www.blogjava.net/wangle/archive/2008/02/26/182184.html</link><dc:creator>雁过无痕</dc:creator><author>雁过无痕</author><pubDate>Tue, 26 Feb 2008 03:38:00 GMT</pubDate><guid>http://www.blogjava.net/wangle/archive/2008/02/26/182184.html</guid><wfw:comment>http://www.blogjava.net/wangle/comments/182184.html</wfw:comment><comments>http://www.blogjava.net/wangle/archive/2008/02/26/182184.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangle/comments/commentRss/182184.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangle/services/trackbacks/182184.html</trackback:ping><description><![CDATA[http://opensource.adobe.com/wiki/display/site/Source
<img src ="http://www.blogjava.net/wangle/aggbug/182184.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangle/" target="_blank">雁过无痕</a> 2008-02-26 11:38 <a href="http://www.blogjava.net/wangle/archive/2008/02/26/182184.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Dont't treat software as an artifact, but as a process of engagement with your users</title><link>http://www.blogjava.net/wangle/archive/2008/01/17/175889.html</link><dc:creator>雁过无痕</dc:creator><author>雁过无痕</author><pubDate>Thu, 17 Jan 2008 03:33:00 GMT</pubDate><guid>http://www.blogjava.net/wangle/archive/2008/01/17/175889.html</guid><wfw:comment>http://www.blogjava.net/wangle/comments/175889.html</wfw:comment><comments>http://www.blogjava.net/wangle/archive/2008/01/17/175889.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangle/comments/commentRss/175889.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangle/services/trackbacks/175889.html</trackback:ping><description><![CDATA[Fellow evangelist Duane Nickull has posted the slides from his <a href="http://www.slideshare.net/adunne/web-20-design-patterns-models-and-analysis">Web 2.0 Design Patterns, Models and Analysis</a> presentation<br />
<object height="200" width="200" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" xcodebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab">
<param name="Movie" value="http://s3.amazonaws.com/slideshare/ssplayer.swf?id=155953&doc=web-20-design-patterns-models-and-analysis-1194273339280295-3"    /><param name="Quality" value="high"   /><param name="wmode" value="transparent"   /><embed src="http://s3.amazonaws.com/slideshare/ssplayer.swf?id=155953&doc=web-20-design-patterns-models-and-analysis-1194273339280295-3" width="200" height="200" quality="high" wmode="transparent" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"   ></embed>
</object>
<img src ="http://www.blogjava.net/wangle/aggbug/175889.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangle/" target="_blank">雁过无痕</a> 2008-01-17 11:33 <a href="http://www.blogjava.net/wangle/archive/2008/01/17/175889.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Inversion of Control for Actionscript 3.0 </title><link>http://www.blogjava.net/wangle/archive/2008/01/09/174077.html</link><dc:creator>雁过无痕</dc:creator><author>雁过无痕</author><pubDate>Wed, 09 Jan 2008 09:42:00 GMT</pubDate><guid>http://www.blogjava.net/wangle/archive/2008/01/09/174077.html</guid><wfw:comment>http://www.blogjava.net/wangle/comments/174077.html</wfw:comment><comments>http://www.blogjava.net/wangle/archive/2008/01/09/174077.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangle/comments/commentRss/174077.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangle/services/trackbacks/174077.html</trackback:ping><description><![CDATA[http://www.pranaframework.org/
<p>reference:<br />
<a href="http://martinfowler.com/articles/injection.html" target="_blank">Inversion of Control Containers and the Dependency Injection Pattern</a>, by Martin Fowler</p>
<br />
Prana是一个用Actionscript写的IoC Framework，理念和Spring非常类似，目的是为了尽可能降低类之间的依赖性，通过xml配置文件使得编译依赖性降低，可以动态装配。这在Java的世界里是非常有意义的，因为所有的事情都发生在server端，Client端并不需要知道这一切。但是在Flex的世界里，swf是客户端下载下来运行在client，如果要达到动态装配的目的，client必须能够有最新需要动态装配的class的字节码，这必然要求swf重新编译，那么这就失去了Ioc的意义了
<img src ="http://www.blogjava.net/wangle/aggbug/174077.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangle/" target="_blank">雁过无痕</a> 2008-01-09 17:42 <a href="http://www.blogjava.net/wangle/archive/2008/01/09/174077.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Module之间的通信交互解决办法</title><link>http://www.blogjava.net/wangle/archive/2008/01/04/172704.html</link><dc:creator>雁过无痕</dc:creator><author>雁过无痕</author><pubDate>Fri, 04 Jan 2008 04:27:00 GMT</pubDate><guid>http://www.blogjava.net/wangle/archive/2008/01/04/172704.html</guid><wfw:comment>http://www.blogjava.net/wangle/comments/172704.html</wfw:comment><comments>http://www.blogjava.net/wangle/archive/2008/01/04/172704.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangle/comments/commentRss/172704.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangle/services/trackbacks/172704.html</trackback:ping><description><![CDATA[<p>看看以下的代码，有点意思<br />
1.子Swf的Code，SampleChildren.mxml<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">&lt;?</span><span style="color: #000000">xml&nbsp;version</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">1.0</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;encoding</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">utf-8</span><span style="color: #000000">"</span><span style="color: #000000">?&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">&lt;</span><span style="color: #000000">mx:Application&nbsp;xmlns:mx</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">http://www.adobe.com/2006/mxml</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;layout</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">absolute</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">mx:Script</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;!</span><span style="color: #000000">[CDATA[<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;mx.managers.SystemManager;<br />
<img id="Codehighlighter1_245_285_Open_Image" onclick="this.style.display='none'; Codehighlighter1_245_285_Open_Text.style.display='none'; Codehighlighter1_245_285_Closed_Image.style.display='inline'; Codehighlighter1_245_285_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_245_285_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_245_285_Closed_Text.style.display='none'; Codehighlighter1_245_285_Open_Image.style.display='inline'; Codehighlighter1_245_285_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;output(s:String):</span><span style="color: #0000ff">void</span><span id="Codehighlighter1_245_285_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_245_285_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trace(s);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_345_437_Open_Image" onclick="this.style.display='none'; Codehighlighter1_345_437_Open_Text.style.display='none'; Codehighlighter1_345_437_Closed_Image.style.display='inline'; Codehighlighter1_345_437_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_345_437_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_345_437_Closed_Text.style.display='none'; Codehighlighter1_345_437_Open_Image.style.display='inline'; Codehighlighter1_345_437_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;CallFriend():</span><span style="color: #0000ff">void</span><span id="Codehighlighter1_345_437_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_345_437_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SampleChildren(_SystemManager.application).output(</span><span style="color: #000000">"</span><span style="color: #000000">call<img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;_SystemManager:SystemManager;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_590_651_Open_Image" onclick="this.style.display='none'; Codehighlighter1_590_651_Open_Text.style.display='none'; Codehighlighter1_590_651_Closed_Image.style.display='inline'; Codehighlighter1_590_651_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_590_651_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_590_651_Closed_Text.style.display='none'; Codehighlighter1_590_651_Open_Image.style.display='inline'; Codehighlighter1_590_651_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;register(ASystemManager:SystemManager):</span><span style="color: #0000ff">void</span><span id="Codehighlighter1_590_651_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_590_651_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_SystemManager</span><span style="color: #000000">=</span><span style="color: #000000">ASystemManager;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]]</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">mx:Script</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">&lt;/</span><span style="color: #000000">mx:Application</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>
<br />
2.主swf的Code, SampleParent.mxml<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">&lt;?</span><span style="color: #000000">xml&nbsp;version</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">1.0</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;encoding</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">utf-8</span><span style="color: #000000">"</span><span style="color: #000000">?&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">&lt;</span><span style="color: #000000">mx:Application&nbsp;xmlns:mx</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">http://www.adobe.com/2006/mxml</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;layout</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">vertical</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">mx:Script</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;!</span><span style="color: #000000">[CDATA[<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;mx.managers.SystemManager;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;Children1,Children2:SystemManager;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_323_487_Open_Image" onclick="this.style.display='none'; Codehighlighter1_323_487_Open_Text.style.display='none'; Codehighlighter1_323_487_Closed_Image.style.display='inline'; Codehighlighter1_323_487_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_323_487_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_323_487_Closed_Text.style.display='none'; Codehighlighter1_323_487_Open_Image.style.display='inline'; Codehighlighter1_323_487_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;onClick(e:Event):</span><span style="color: #0000ff">void</span><span id="Codehighlighter1_323_487_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_323_487_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SampleChildren(Children1.application).register(Children2);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SampleChildren(Children2.application).register(Children1);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_557_678_Open_Image" onclick="this.style.display='none'; Codehighlighter1_557_678_Open_Text.style.display='none'; Codehighlighter1_557_678_Closed_Image.style.display='inline'; Codehighlighter1_557_678_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_557_678_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_557_678_Closed_Text.style.display='none'; Codehighlighter1_557_678_Open_Image.style.display='inline'; Codehighlighter1_557_678_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;initNestedAppProps():</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_557_678_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_557_678_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Children1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;SystemManager(myLoader.content);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trace(Children1.application);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_736_858_Open_Image" onclick="this.style.display='none'; Codehighlighter1_736_858_Open_Text.style.display='none'; Codehighlighter1_736_858_Closed_Image.style.display='inline'; Codehighlighter1_736_858_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_736_858_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_736_858_Closed_Text.style.display='none'; Codehighlighter1_736_858_Open_Image.style.display='inline'; Codehighlighter1_736_858_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;initNestedAppProps2():</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_736_858_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_736_858_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Children2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;SystemManager(myLoader2.content);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trace(Children2.application);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_920_1002_Open_Image" onclick="this.style.display='none'; Codehighlighter1_920_1002_Open_Text.style.display='none'; Codehighlighter1_920_1002_Closed_Image.style.display='inline'; Codehighlighter1_920_1002_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_920_1002_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_920_1002_Closed_Text.style.display='none'; Codehighlighter1_920_1002_Open_Image.style.display='inline'; Codehighlighter1_920_1002_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;onC1(e:Event):</span><span style="color: #0000ff">void</span><span id="Codehighlighter1_920_1002_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_920_1002_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SampleChildren(Children1.application).CallFriend();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;<br />
<img id="Codehighlighter1_1053_1135_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1053_1135_Open_Text.style.display='none'; Codehighlighter1_1053_1135_Closed_Image.style.display='inline'; Codehighlighter1_1053_1135_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_1053_1135_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1053_1135_Closed_Text.style.display='none'; Codehighlighter1_1053_1135_Open_Image.style.display='inline'; Codehighlighter1_1053_1135_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;onC2(e:Event):</span><span style="color: #0000ff">void</span><span id="Codehighlighter1_1053_1135_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_1053_1135_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SampleChildren(Children2.application).CallFriend();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]]</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">mx:Script</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">mx:Button&nbsp;label</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">ClickMe</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;click</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">onClick(event);</span><span style="color: #000000">"</span><span style="color: #000000">/&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">mx:Button&nbsp;label</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">c1&nbsp;call&nbsp;c2</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;click</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">onC1(event);</span><span style="color: #000000">"</span><span style="color: #000000">/&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">mx:Button&nbsp;label</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">c2&nbsp;call&nbsp;c1</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;click</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">onC2(event);</span><span style="color: #000000">"</span><span style="color: #000000">/&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">mx:SWFLoader&nbsp;id</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">myLoader</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;width</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">300</span><span style="color: #000000">"</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;source</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">SampleChildren.swf</span><span style="color: #000000">"</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;creationComplete</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">initNestedAppProps();</span><span style="color: #000000">"</span><span style="color: #000000">/&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">mx:SWFLoader&nbsp;id</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">myLoader2</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;width</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">300</span><span style="color: #000000">"</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;source</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">SampleChildren.swf</span><span style="color: #000000">"</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;creationComplete</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">initNestedAppProps2();</span><span style="color: #000000">"</span><span style="color: #000000">/&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">&lt;/</span><span style="color: #000000">mx:Application</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>
<br />
注意到SampleParent.mxml文件中SampleChildren类的使用了么，原来mxml文件也是对应一个同名的actionscript class的，这个class是从Application派生的。但是要注意哦，SampleParent.mxml编译时必须能够看到SampleChildren类的Source。
<img src ="http://www.blogjava.net/wangle/aggbug/172704.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangle/" target="_blank">雁过无痕</a> 2008-01-04 12:27 <a href="http://www.blogjava.net/wangle/archive/2008/01/04/172704.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转贴两篇关于Flex FrameWork以及模块化开发的文章，第一篇Flex Framework Fundamentals </title><link>http://www.blogjava.net/wangle/archive/2008/01/04/172701.html</link><dc:creator>雁过无痕</dc:creator><author>雁过无痕</author><pubDate>Fri, 04 Jan 2008 04:19:00 GMT</pubDate><guid>http://www.blogjava.net/wangle/archive/2008/01/04/172701.html</guid><wfw:comment>http://www.blogjava.net/wangle/comments/172701.html</wfw:comment><comments>http://www.blogjava.net/wangle/archive/2008/01/04/172701.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/wangle/comments/commentRss/172701.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangle/services/trackbacks/172701.html</trackback:ping><description><![CDATA[<div class="postbody">转载自：http://www.cnblogs.com/sharplife/archive/2007/09/03/880641.html
<p>最近看时学习Flex应用，开始对Flex和Flash的关系有些模糊，读了Oreilly的Programming Flex 2才算是明白些，现记下。<br />
<br />
1、Flex应用程序的生命周期<br />
Flex应用就其根本上讲就是Flash应用，只不过其是基于Flex Framework（由ActionScript写就）开发的。Flex应用程序的根对象的是SystemManager(不是我们在flex应用上看到的Application根元素)，继承自flash.dispaly.MovieClip—flash player display type，MovieClip是一种支持timeline基本元素帧frame的对象，在Flex Framework中SystemManager是特殊的，含有两帧（其他component都是一帧的），分别是preloader和真正的Application，preloader帧可以迅速下载下来并用于显示应用下载进度，一旦Flex应用的SystemManager实例进入第二帧，将创建Flex主应用application实例并赋予本身的属性application（在进入第二帧之前是null），自此application（flex主应用）的内部生命周期、事件开始运作：<br />
preinitialize：application已经实例化但尚未创建任何child component<br />
initialize：已经创建child component但对其进行布局（lay out）<br />
creationComplete：application已经完成实例化并完成所有child component的布局<br />
SystemManager有一个topLevelSystemManager对象，指向一个SystemManager实例，是所有当前在flash player运行的任何东西的根（root），如果flex被作为主应用加载到flash player则上述属性将指向其本身（self-refrencing），但当flex应用是被另一flex应用载入的，其自身的SystmenManager的topLevelSystemManager属性则不是自引用了，而是指向其父应用的SystemManager实例。所有UIComponent的子类都有一个systemManager属性指向应用的SystemManager实例，在被SystemManger实例监听的component的事件发生冒泡时，其将拥有事件处理链上最后的处理权。</p>
<p>2、Flash palyer和Framwork的区别<br />
Flash player是Flex应用和flash应用的运行环境，两应用对其拥有完全平等的操作权（通过Flash player提供的API），两应用形成的.swf文件在flash player中是同样的表现，不同的不是应用的内容而是其各自的创建方式。Flex的Framework在开发和运行之间为应用提供了一层抽象，Flex应用编译时会将必要的framwork library编译进.swf文件（同样影响应用文件的大小等），主要的flash player class当然不会被编译到.swf中，因为他们已经存在于flash player中了，最终形成与flash应用同样的flash player可以理解的指令。<br />
关于flash player class和flex framework的区分很方便，前者的class以flash开头，如flash.net.URLLoader，而后者则以mx开头，如mx.controls.Button</p>
<p>3、动态载入另外的flex应用<br />
&lt;mx:SWFLoader source=&#8221;src/*.swf&#8221;/&gt;<br />
Swfloader的content属性指向被载入的flex应用的SystemManager实例（其application属性指向被载入felx应用的Application实例），swfloader加载、初始化被载入flex应用时会dispatch出init事件，可与其中监听被载入flex应用的SystemManager实例的ApplicationComplete事件，事件发生时被载入content的Application对象方可以引用<br />
与inithandler中event.target.content.addEventListener(FlexEvent.APPLICATION_COMPLETE,func);<br />
与applicationCompleteHandler中event.target.application.method&#8230;</p>
<p>4、理解应用程序域（application domain）<br />
一个应用程序domain（类似于.net的appdoamin）中有flex应用的相关类定义、资源等，被载入的新flex应用可以存在于一个全新的、隔离的domain中（占额外的内存资源）、可以存在于当前domain的子doamin中（共享父domain的资源、类定义，须注意类定义被取代的情况）、也可以直接存在与当前doamin中（同样须注意类定义冲突），如runtime shared library。<br />
代码中实现这三种方式的应用（主要应用到flash.system.LoaderContext、flash.display.Loader或flash.net.URLLoader、flash.system.ApplicationDomain）</p>
<p>var context:LoaderContext = new LoaderContext( );<br />
context.applicationDomain = new ApplicationDomain(ApplicationDomain.currentDomain);//载入作为子domain<br />
context.applicationDomain = new ApplicationDomain();//载入作为全新domain<br />
context.applicationDomain = ApplicationDomain.currentDomain;//载入当前domain<br />
var request:URLRequest = new URLRequest("RuntimeLoadingExample.swf");<br />
var loader:Loader = new Loader( );<br />
loader.load(request, context);</p>
<p>5、关于preloader<br />
Preloader是一个轻量级的类，在systemManager的第一帧被实例化，preloader会dispatch出一系列的事件，由progress bar监听实现loading界面，一旦应用进入第二帧待application初始化后会借由system manager通知preloader初始化进度，preloader通知system manager其准备待删除<br />
Preloader的事件dispatch：<br />
progress<br />
Indicates download progress<br />
complete<br />
Indicates that the download is complete<br />
rslError<br />
Indicates that a runtime shared library could not load<br />
rslProgress<br />
Indicates the download progress for a runtime shared library<br />
rslComplete<br />
Indicates that the download is complete for runtime shared libraries<br />
initProgress<br />
Indicates that the application is initializing<br />
initComplete<br />
Indicates that the application has initialized</p>
<p>如此，preloader可以定制化了。<br />
<br />
Over，晕倒！~</p>
</div>
<img src ="http://www.blogjava.net/wangle/aggbug/172701.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangle/" target="_blank">雁过无痕</a> 2008-01-04 12:19 <a href="http://www.blogjava.net/wangle/archive/2008/01/04/172701.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VC中IDE中调试与运行时行为不一致的原因</title><link>http://www.blogjava.net/wangle/archive/2007/11/28/163808.html</link><dc:creator>雁过无痕</dc:creator><author>雁过无痕</author><pubDate>Wed, 28 Nov 2007 12:57:00 GMT</pubDate><guid>http://www.blogjava.net/wangle/archive/2007/11/28/163808.html</guid><wfw:comment>http://www.blogjava.net/wangle/comments/163808.html</wfw:comment><comments>http://www.blogjava.net/wangle/archive/2007/11/28/163808.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/wangle/comments/commentRss/163808.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangle/services/trackbacks/163808.html</trackback:ping><description><![CDATA[<p>有时会出现IDE中调试时出错，但是在外部直接运行程序不出错的情况，或者反之，出现这种情况的原因一般都是“当前路径”引起的，也就是CurrentPath不一样，这可能导致dll加载搜索路径不一样，以及其它一些路径引起的问题。</p><img src ="http://www.blogjava.net/wangle/aggbug/163808.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangle/" target="_blank">雁过无痕</a> 2007-11-28 20:57 <a href="http://www.blogjava.net/wangle/archive/2007/11/28/163808.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Flex 中的Event Propogation</title><link>http://www.blogjava.net/wangle/archive/2007/09/19/146624.html</link><dc:creator>雁过无痕</dc:creator><author>雁过无痕</author><pubDate>Wed, 19 Sep 2007 14:51:00 GMT</pubDate><guid>http://www.blogjava.net/wangle/archive/2007/09/19/146624.html</guid><wfw:comment>http://www.blogjava.net/wangle/comments/146624.html</wfw:comment><comments>http://www.blogjava.net/wangle/archive/2007/09/19/146624.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangle/comments/commentRss/146624.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangle/services/trackbacks/146624.html</trackback:ping><description><![CDATA[<p>Flex中的Event传递主要有三个阶段：capturing， targeting， bubbling。比如一个Button收到了一个消息，首先会从其根父UI Object上开始逐步Capture直到其父Object，然后由该Button履行Target阶段，最后再以Capture相反的方向Bubble。当然这些阶段都是相对DisplayObject来说的，对于其他的Object比如Socket，Event只会交给Target对象处理。</p> <p>先来看Capture阶段：</p> <p>这个阶段是从父到子的一个过程，典型应用：myPanel.addEventListener(MouseEvent.MOUSE_DOWN, clickHandler, true);</p> <p>注意第三个参数useCapture被设为true，表示clickHandler只想处理Capture过程的事件，如果还想处理bubble阶段的事件，那么必须再以useCapture=false调用一次addEventListener</p> <p>Flex Develop Guide中有一句话：The capturing phase is very rarely used, and it can also be computationally intensive. By contrast, bubbling is much more common.我还不是特别理解，先写下来再说吧。</p> <p>再看Target阶段：</p> <p>这个很简单，由DispatchEvent的对象直接处理。</p> <p>然后是Bubble阶段。Bubble阶段只有bubbles属性为true的Event才会有这个过程，包括<code>change</code>, <code>click</code>, <code>doubleClick</code>, <code>keyDown</code>, <code>keyUp</code>, <code>mouseDown</code>, and <code>mouseUp等事件。对于自定义事件，bubbles能否设成true还未知，因为它似乎是只读的，还有待验证。</code></p><img src ="http://www.blogjava.net/wangle/aggbug/146624.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangle/" target="_blank">雁过无痕</a> 2007-09-19 22:51 <a href="http://www.blogjava.net/wangle/archive/2007/09/19/146624.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>