??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美成人片在线,日韩毛片在线看,亚洲精品一区二区三区在线观看http://www.aygfsteel.com/gembin/category/33693.html<font color="red">OSGi, Flex, GraniteDS, JSF, Eclipse RCP,XML<br/> 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.</font> zh-cnSat, 13 Nov 2010 22:22:16 GMTSat, 13 Nov 2010 22:22:16 GMT60Flex and Deep Linkinghttp://www.aygfsteel.com/gembin/archive/2010/11/12/337913.htmlgembingembinFri, 12 Nov 2010 07:06:00 GMThttp://www.aygfsteel.com/gembin/archive/2010/11/12/337913.htmlhttp://www.aygfsteel.com/gembin/comments/337913.htmlhttp://www.aygfsteel.com/gembin/archive/2010/11/12/337913.html#Feedback0http://www.aygfsteel.com/gembin/comments/commentRss/337913.htmlhttp://www.aygfsteel.com/gembin/services/trackbacks/337913.html阅读全文

gembin 2010-11-12 15:06 发表评论
]]>
Using Flex with Scalahttp://www.aygfsteel.com/gembin/archive/2010/06/25/324394.htmlgembingembinFri, 25 Jun 2010 01:51:00 GMThttp://www.aygfsteel.com/gembin/archive/2010/06/25/324394.htmlhttp://www.aygfsteel.com/gembin/comments/324394.htmlhttp://www.aygfsteel.com/gembin/archive/2010/06/25/324394.html#Feedback0http://www.aygfsteel.com/gembin/comments/commentRss/324394.htmlhttp://www.aygfsteel.com/gembin/services/trackbacks/324394.html阅读全文

gembin 2010-06-25 09:51 发表评论
]]>
Flex 4: change baseColor to chromeColor and useChromeColor=truehttp://www.aygfsteel.com/gembin/archive/2010/06/18/323834.htmlgembingembinFri, 18 Jun 2010 09:30:00 GMThttp://www.aygfsteel.com/gembin/archive/2010/06/18/323834.htmlhttp://www.aygfsteel.com/gembin/comments/323834.htmlhttp://www.aygfsteel.com/gembin/archive/2010/06/18/323834.html#Feedback0http://www.aygfsteel.com/gembin/comments/commentRss/323834.htmlhttp://www.aygfsteel.com/gembin/services/trackbacks/323834.html阅读全文

gembin 2010-06-18 17:30 发表评论
]]>
视频: L2 Adobe ROME Adobe Max 2009(COOL!)http://www.aygfsteel.com/gembin/archive/2009/10/12/297992.htmlgembingembinMon, 12 Oct 2009 14:26:00 GMThttp://www.aygfsteel.com/gembin/archive/2009/10/12/297992.htmlhttp://www.aygfsteel.com/gembin/comments/297992.htmlhttp://www.aygfsteel.com/gembin/archive/2009/10/12/297992.html#Feedback0http://www.aygfsteel.com/gembin/comments/commentRss/297992.htmlhttp://www.aygfsteel.com/gembin/services/trackbacks/297992.html阅读全文

gembin 2009-10-12 22:26 发表评论
]]>
Adobe ROME Preview(COOL!)http://www.aygfsteel.com/gembin/archive/2009/10/12/297989.htmlgembingembinMon, 12 Oct 2009 14:20:00 GMThttp://www.aygfsteel.com/gembin/archive/2009/10/12/297989.htmlhttp://www.aygfsteel.com/gembin/comments/297989.htmlhttp://www.aygfsteel.com/gembin/archive/2009/10/12/297989.html#Feedback0http://www.aygfsteel.com/gembin/comments/commentRss/297989.htmlhttp://www.aygfsteel.com/gembin/services/trackbacks/297989.html阅读全文

gembin 2009-10-12 22:20 发表评论
]]>
Adobe labs开放FC和FB4的public beta下蝲http://www.aygfsteel.com/gembin/archive/2009/06/10/281035.htmlgembingembinTue, 09 Jun 2009 17:17:00 GMThttp://www.aygfsteel.com/gembin/archive/2009/06/10/281035.htmlhttp://www.aygfsteel.com/gembin/comments/281035.htmlhttp://www.aygfsteel.com/gembin/archive/2009/06/10/281035.html#Feedback0http://www.aygfsteel.com/gembin/comments/commentRss/281035.htmlhttp://www.aygfsteel.com/gembin/services/trackbacks/281035.html
http://labs.adobe.com

Flash Builder 4安装包将会根据你操作pȝ的语a配置文和体中文的选择。下面是部分来自Release Notes的翻译?br /> 新增功能Q?br /> Flex SDK

* 引入一个全新的功能强大的组件皮肤框Ӟ叫做Spark?br /> * ZSpark框架q行初始化的lg可以与Flex3中的Halolg集合混合和匹配用?br /> * 支持声明化的Q动态的MXML囑ŞQ以及FXG格式的图形?br /> * 全新的Spark默认外观Q支持全新的样式集合?br /> * 更强大的布局支持Q包括支持MXML囑Ş元素Q增强对于翻转和其他变Ş的支持,支持指定自定义的布局Q增强z轴管理?br /> * 一些新的和增强的特效,包括支持MXML囑Ş元素的动画,通过自定义的动画修改Q更多易用的API调用方式Q更多的自动化的交互行ؓ?br /> * 3DҎ支持
* Flash动画滤镜Q包括Pixel Bender?br /> * 更多高字体支持。基于Flash Text 引擎和Text布局框架Q也支持CFFQCompact Font FormatQ?br /> * ~译器性能提升?br /> * 新的MXML语言功能Q包括MXML 2009命名I间Q声明,库和标签定义?br /> * CSS增强Q包括支持命名空_l承选择器,ID选择器,更多的类选择器和针对lg状态的伪选择器支持?br /> * 语法增强和状态states增强?br /> * 方便的数据双向绑定语法?br /> * ASDoc支持在mxml文g里的lg?br /> * 增强的HTML模板Q基于SWFObject?br /> * adobe.com存放 SDKq行时共享库RSL?br /> * 额外的本地化支持Q更好的开发本地化应用?br />
Flash Builder新功?br />
* 一个面向创建数据服务应用的新工作流Q包括CF,PHP,Java,WebServicesQ?br /> * 支持由Flash Catalyst创徏的FXG目
* 一个全新的Network监控Q帮助诊断客L和服务器D늚通讯问题
* Flex 单元试整合?br /> * 自动生成getter和setter?br /> * ASDoc支持在MXML和AS中显CASDoc注释
* 自定义文件模板支持MXMLQAS和CSS文g?br /> * 自动生成事g处理函数l构?br /> * 调试器增强?br /> * Profiler增强?br /> * Refactoring增强
* 新的Component kit for Flash CS4
* 新支持命令行构徏执行方式?br /> * 导入和应用Flex主题新用L面?br /> * 新的Flexcd览器替代Flex Navigator面板?

gembin 2009-06-10 01:17 发表评论
]]>
Google采用FLEX构徏虚拟C֌Lively [zhuan]http://www.aygfsteel.com/gembin/archive/2008/12/19/247320.htmlgembingembinFri, 19 Dec 2008 05:30:00 GMThttp://www.aygfsteel.com/gembin/archive/2008/12/19/247320.htmlhttp://www.aygfsteel.com/gembin/comments/247320.htmlhttp://www.aygfsteel.com/gembin/archive/2008/12/19/247320.html#Feedback1http://www.aygfsteel.com/gembin/comments/commentRss/247320.htmlhttp://www.aygfsteel.com/gembin/services/trackbacks/247320.html阅读全文

gembin 2008-12-19 13:30 发表评论
]]>
[原创]Example for GraniteDS v1.2.0 OSGi bundle http://www.aygfsteel.com/gembin/archive/2008/12/10/245388.htmlgembingembinTue, 09 Dec 2008 18:21:00 GMThttp://www.aygfsteel.com/gembin/archive/2008/12/10/245388.htmlhttp://www.aygfsteel.com/gembin/comments/245388.htmlhttp://www.aygfsteel.com/gembin/archive/2008/12/10/245388.html#Feedback7http://www.aygfsteel.com/gembin/comments/commentRss/245388.htmlhttp://www.aygfsteel.com/gembin/services/trackbacks/245388.html阅读全文

gembin 2008-12-10 02:21 发表评论
]]>
[原创] Dynamic DataService registration in OSGi Container for Graniteds v1.1.0http://www.aygfsteel.com/gembin/archive/2008/12/04/244374.htmlgembingembinThu, 04 Dec 2008 06:51:00 GMThttp://www.aygfsteel.com/gembin/archive/2008/12/04/244374.htmlhttp://www.aygfsteel.com/gembin/comments/244374.htmlhttp://www.aygfsteel.com/gembin/archive/2008/12/04/244374.html#Feedback0http://www.aygfsteel.com/gembin/comments/commentRss/244374.htmlhttp://www.aygfsteel.com/gembin/services/trackbacks/244374.html阅读全文

gembin 2008-12-04 14:51 发表评论
]]>
[原创] Adding OSGi support to graniteds v1.1.0http://www.aygfsteel.com/gembin/archive/2008/12/03/244230.htmlgembingembinWed, 03 Dec 2008 15:18:00 GMThttp://www.aygfsteel.com/gembin/archive/2008/12/03/244230.htmlhttp://www.aygfsteel.com/gembin/comments/244230.htmlhttp://www.aygfsteel.com/gembin/archive/2008/12/03/244230.html#Feedback2http://www.aygfsteel.com/gembin/comments/commentRss/244230.htmlhttp://www.aygfsteel.com/gembin/services/trackbacks/244230.html阅读全文

gembin 2008-12-03 23:18 发表评论
]]>
Thermo From Adobe Labs http://www.aygfsteel.com/gembin/archive/2008/09/24/230873.htmlgembingembinWed, 24 Sep 2008 06:33:00 GMThttp://www.aygfsteel.com/gembin/archive/2008/09/24/230873.htmlhttp://www.aygfsteel.com/gembin/comments/230873.htmlhttp://www.aygfsteel.com/gembin/archive/2008/09/24/230873.html#Feedback0http://www.aygfsteel.com/gembin/comments/commentRss/230873.htmlhttp://www.aygfsteel.com/gembin/services/trackbacks/230873.html Thermo

From Adobe Labs

Product Codename: "Thermo"

"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.

Features

  • Use drawing tools to create original graphics, wireframe an application design, or manipulate artwork imported from Adobe Creative Suite tools.
  • Turn artwork from Adobe Photoshop, Illustrator, or Fireworks directly into functional components that use the original artwork as a “skin”.
  • Define and wire up interactive behavior, such as what to do when a user clicks on something, without having to write code.
  • 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.

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.

Check back for more details on Thermo soon!

Thermo
Enlarge
Thermo


Converting Artwork to Functional Components
Enlarge
Converting Artwork to Functional Components


Working with Design Time Sample Data
Enlarge
Working with Design Time Sample Data


Visually Wiring Up Events and Bindings
Enlarge
Visually Wiring Up Events and Bindings


Drawing Tools to Create Original Artwork or to Manipulate Graphics
Enlarge
Drawing Tools to Create Original Artwork or to Manipulate Graphics
Retrieved from "

gembin 2008-09-24 14:33 发表评论
]]>MAX2007q会ȝ十项技??http://www.aygfsteel.com/gembin/archive/2008/09/24/230871.htmlgembingembinWed, 24 Sep 2008 06:21:00 GMThttp://www.aygfsteel.com/gembin/archive/2008/09/24/230871.htmlhttp://www.aygfsteel.com/gembin/comments/230871.htmlhttp://www.aygfsteel.com/gembin/archive/2008/09/24/230871.html#Feedback0http://www.aygfsteel.com/gembin/comments/commentRss/230871.htmlhttp://www.aygfsteel.com/gembin/services/trackbacks/230871.html关键? flex max

1. Flex Builder 3/AIR beta2 on lab

q两样东西会?span> max 期间攑և beta 2 (M5) 应该是旧闻Q还有h事先不知道才是比较奇怪?/span>beta2 本n的新功能?wiki 上有详细介绍Q但重点不外乎在 IDE 本n的强化?span>AIR 整合?span>CSS 设计?span> Profiler{?/span>比较重要的是大概有三?/span>-新售价出来了Q将?span> FB 分两U版?/span>
Standard: $299
Pro: $699
Standard 比现?span> $499 q降200元,所以现在是行新版本都要降两百?/span>Q不q没?span> charting component, q些玩意(包含?span> AdvancedDataGrid q种 visual data component{?span>)
都移?span> Pro 版?/span>q样做的意义很明显,主要是要大q降?span> flex 的进入门坎,原本?span>$499 才能有拥?span> IDEQ现在只?span> $299 几乎是hZ的vQ另一斚wQ对每天靠开?span> flex 为生的h来说Q将好料的一ơ全塞入pro版,而且比现?span> $799 低了 100元,也算是方便许多,臛_付一ơ钱可以买到全部的东西(而不用再一hM费然后拼h)Q这个市场策略不错?/span>-Linux 版问?/span>
q世界上g有很多h一直想?span> linux 上开?span> flexQ而且只用 text editor + sdk q不够,一定要?span> IDE
才过瘾,现在可称心如意了Q?span>beta
版已可在 lab 上下载?/span>-flex testing framework 改ؓ免费
以往要用 Mercury Quicktest Pro 来做 UI testing Ӟ必需要先?span> testing framework, 但它需要一l?span> FDS 的序h能用,而几乎没Z愿意?span> $6,000-$12,000
的h钱去买这玩意?/span>两个月前我在玩某?span>fb3 beta 版本Ӟ意外在安装目录下发现居然内徏了这?span> installerQ而且q真的可以装也可以用Q那时我以ؓ是只是单U的意外不小心包了进?span>(或是 adobe 心想反正卖不掉干脆欢乐大N?span>)Q现在才知道原来q些是故意的?span>~

2. Thermo

_略介看q里

Max 期间另一个重头戏是 Thermo 初亮相,|络上已l有一些媄片可看?/span>

目前看来它的操作方式很像 adobe 产品的大合体Q我观察到的包含-可直接读?span> Photoshop PSD 档,q且当然保留所有的 layer 信息?span> meta info-d?span> psd 档会?span> tracing image 的方式显C在底层(q是?span> dreamweaver ?span> golive 借来的概?span>)-可用cM edit in place (q是 fireworks, image ready, golive 时代有的东?span>)画面元素{换ؓ mxml lgQ而且会保?span> style info-转换?span> mxml 后会使用新的 tag 来标识,例如 mx:bitmapGraphic ?/span>
mx:borderSkinFactory
-可制作多?span> state q在光切换(q跟 fireworks cs3 里新出现?span> page 面板概念完全一?span>)-拥有 timeline 可制?span> transition/effectQ例?span> mouseover 时某个对象要渐大或渐等变化Q乍看之下很像是 flash 附n XD整段q看完初步的感觉如下:1、我臛_?span> thermo 里看?span> photoshop, flash, fireworks, dreamweaver, image ready, golive {Y件的功能与媄子,q应该可说是合ƈ?span> 1+1 > 2 的例子之一?/span>2、目前看来工作流E会是这?/span>Photoshop -> Thermo < -> Flex也就是视觉的东西 70% 都在 photoshop/illustrator 里做好,然后?span> psd 丢给 thermo ?span> interaction designQ但它也同时提供?span> mxml 产生器,让设计师可以进一步跨界将视觉元素转成可编E的 mxml lgQ最后交l工E师?span> coding?/span>3、至?span> thermo 实不实用呢?嗯,q要看你怎么定位它?/span>从历史上来看Q类?span> fireworks/image ready q种 psd to html 产生器的工作程基本上从来没成功q,因ؓ one-way 式的?span> psd ?span> html 或许很容易,但当 html 要回?span> psd Ӟ困难度就很高Q到最后都是『工人智慧』来解决?/span>但如果从 quick-prototyping or Proof of Concept(POC)的角度来看,thermo 可能会是很好的帮手,因ؓ设计师可以尽情的发挥视觉设计美的版面做出来,然后透过 thermo 产生可实际操作的 flex 接口Q这样客户可以看的到也摸的到来实际成品可能的样貌,制作团队也能比较完整的掌握客h要的东西?/span>至于真正要开始制?span> flex appӞ我想 thermo 的帮助就不大Q因不懂E序的设计师来帮忙切 ui lgQ决定每?span> module 该如何画分?q样冒的风险实在太大Q切出来?span>mxml 大概也没法用Q最后还是要重新来?/span>但这又带到另一个鸡生蛋、蛋生鸡的老问题?/span>Thermo ? 所以会出现Q是Z解决工程师不懂如何将视觉画面转换为成品,因此希望p计师来帮忙这件事Q但p计师来做qg事缺点也很多Q上面也已稍微解释,所以这 仍然是一个两隄问题Q也是设计师帮忙切画面Q切出来的东西可能工E师觉得不好用或无法用,但由工程师去切画面,可能整支E序画面也就毁了Q所以最l下 场差不多?/span>依我q几q全职开?span> flash/flex 的经验来看,以往许多人提出的
graphic designer - interaction designer - developer
三分工制只能算是第一步,thermo 的出现可能可以实质帮?span> interaction designer 的忙Q但 interaction designer ?span> developer q段仍然会是断层Q而解决之道,则是要找C个方式将q?span> missing link
l补hQ这也将?span> thermo
成|的最大关?span>(目前看来Q?span>blend/expression/xaml 的尝试不甚成功,希望 adobe可以另觅它途让人眼睛一亮啊)

3. Flash Player 10 (codename Astro)

FP9 ?span> as2 发展?span> as3 可说?span> flash 十年来最惊h的大跃进Q几乎完全改写了 RIA 的历Ԍ原本以ؓ大概很难再看到同?span> level 的改版,但很昄我错了?/span>FP10 新增的几个重点功能大略包?/span>-易的 hardware 3D supportQ看来原本打M愿意?span> fp 加入3d功能?span> engineering team q是很顺应民情啊Q当然目前看到的 3d 功能q非常有限,有hU它?span> 2.5DQ也有hUCؓ card-game style 3DQ不q就我对 flash player team 的了解,来内徏?span> 3D 功能q上 Papervision3D 应该是没问题的?/span>-advanced text layout: q包含了 multi-column 的走文方式,也包含了 right-to-left layout(RTL)Q这两g事在q去我们都遇q,d制作的一个大?span>app在多国语a化时Q客户居焉Q『希伯来文版的接口文字应该是从右到左啊,可以改一下吗Q』当时心里的回答Q『当然可以,你先C flash player team 交给我指挥,我保证半q内生出来给?span>…』现在这件事可简单多了,只是 UI Component 部䆾要改写的东西q是很费力啊?/span>-custom filter/effect with “Hydra” image processing language:
q算是非常有的新玩意,Hydra 是一U类?span> C 的语aQ?span>user
可用它编辑自已独门的 filter/effectQ之前有 Vector/Bitmap API 大家已l玩Z堆疯狂的把戏Q现在有了更 low-level 的工P呵呵呵,_ֽ可期Q只是以后教 flash 的讲师是不是也要q修一?span> C/C++
?span>? Orz

4. Flash Lite 3 推出

功能介绍?span>q里重点?/span>
-flash home:
q个是真正的新玩意Q以往 flash lite 都是?span> app 的型式存在于手机上,也就是要用时才启动,?span> flash home 则是直接?span> flash lite
取代掉手机的开机画面,一开机完是 flash lite 在那里,而且它是 instant on?/span>
之前曾聊q?span> LG phone 整个 UI 都用 flash lite 写成Q现在则是更q一步攻占了开机画面,未来的发展非常有啊Q希望它能尽快追?span> as3 的脚步,把传说中?span> flex framework for mobile 搬出来,届时可就玩到乐翻天了?/span>-as2 support: q个好像喊很久了Q现在真的支?span> class 了吗Q?/span>
-flv support:
q个到是很重要的新功能,不过已经不是新闻Q今q初时就已发?/span>
-xml loading:
?span> flash lite 2.1 起就可以支持 socket serverQ所以要在手Z?span> push/pull 变的非常?/span>
 

5. VOIP in flash

FP 支?span> voip 不是新闻Q但真正看到它运作还是吓一跟?/span>Pacifica 是这个品的代号Q它提供下列功?span>:Version 1:
* HQ voice chat
* text instant messaging
* presence
* NAT/Firewall traversal
* Ajax/HTML, Flash/Flex
Future Roadmap:
* video chat
* p2p
* AIR
* PSTN Access
要注意的重点是这几个?span>: VoIP, SIP, SDP ?span> P2P?/span>
你能惌一?span> flash player 本n内徏 VoIP ?span> SIP 支持后,可能的应用有多广吗?单来_上面listing 里面随便一,都可以将q个世界再翻一遍,差不多就是这L影响力?/span>

6. CoCoMo

q可不是 Adobe ?Beach Boys 的异业结盟?/span>CoCoMo ?span> Adobe Connect (也就?span> Breeze) 新版本的代号Q不出所料果然用 flex 全部改写Q但更惊人的是它开始玩起另一个更有潜力的市场Q?span>API platform ! flex developer 可操?span> Adobe Connect ?span> API 来制作各U?span> desktop sharing, audio/video chat & collaborationQ相较之下,之前炒的火热?span> facebook platform 实在是没什么啊(不过当然q两者可以是完美的互补,不一定是零合游戏)?/span>

7. Share

一?span>在线文g、分享、阅ȝq_Q每?span>user ?span> 1gb I间?/span>同样?span> flex 写成Q用了许多熟悉的lgQ例?span> page component (oh, the great Ely!) ?span> flash paperQ也提供 REST style API 可供 mesh upQ将来打整?span> Buzzword 提供~辑功能?/span>从本质来看,online-doc sharing q种东西当然早就有h做过了,|络上随侉K可以扑ֈ一狗票Q同h让h上传文gQ然后{档成 swf 再用 flash player 来看Q那 adobe 又何苦呢Q?/span>我来看Q?span>Share ?span> adobe ?span> web publishing 斚w的新试Q主要利用的优势当然是自家?span> PDF ?span> flash playerQ但跟其它单U只?web 2.0 startup 公司不同的是Q?span>adobe 心里想的应该是它完整?span> electronic publishing q_Q从内容、制作、生成到消费Q希望能通通包下来Q徏立大一l的体系Q我怿 Share 与之前介l过?span> ebook reader 都只是这个计划下的部份物,未来发展q待观察?/span>

8. C/C++ to AS3 conversion

 LLVM

q个玩意非常有趣Q这位神人写了一?span> compilerQ可以将 C/C++ ?span> code 直接转译?span> AS3Q然后再~译?span> swf ?span> flash/flex/air 使用Q现场最另h震撼?span> demo 是他直接将 Quake (一?span> doom-like 的射L?span>) ~译?span> flash 版然后玩了v来,你可以想见现Z疯狂C么程?span>!! (更酷的是q位工程师还是一副^淡的表情Q真正是扮猪吃老虎的极致表现啊)?/span>好,热情完毕Q接着分析师上w?/span>我主要思考的是下列三点:1. Z需要这个东西?上图中四个角落写着 (ruby, php, python, lua), 它代表什么?
2.
q东西背后的企图是什么?
3.
谁会LQ它可以用在什么地方?发展潜力有多大?
基本上我已经有了一套大致的x与理论,但很有兴想听听各位的想法?/span>

9. Adobe C Buzzword

qg事其实几个月前就有风声出来,?adobe W一批工E师q驻 buzzword 办公室时Q明ghq道是怎么回事了,反而比较奇怪的Z SlideRocket 一直谈不下?span>(h家还?span> IPO 前多撒点钱快Ҏ定将来比较好办事?span>)Q?/span>从市度来看,Buzzword(cM word 的文字编辑器) ?span> SlideRocket(cM powerpoint 的简单Y?span>) 应该是当?span> RIA 业界最׃表性与杀伤力的两?span>appQ它们几乎有撼动 Office 市场的能力,因此 adobe 对它们的重视与关爱可说是其来有自Q亳不奇怪?/span>比较值得观察的将是,q早 Adobe 手上会有 word, powerpoint ?span> excel 兼容的Y?span>(当然?span> built with Flex/AIR)Q届时世界上只有四间L商业公司有成熟的 office 产品(OO.o q种先不算q来Q呃Q好Q其实还?span> IBM Lotus SymphonyQ不q知名度不高也先放一?span>)-Microsoft: Office 的霸d位无庸置疑,runs on desktop only
-Apple: Mac
上的 Office
, runs on desktop only
-Google: Doc
pd产品Q算是目?span> web-based
里最成熟的一?/span>

-Adobe:
同样?span> web-based, 但因为采?span> flash 制作Q因此操作接口与功能明显超?span> google docs (
与其?span> ajax pd?span> office-apps)而其中只?span> google ?span> adobe 已经很积极在 web-based q块p?span>(MS?span> office live 则还未成?span>)Q从势来看(on-line, access everywhere, collaboration, messaging)Q?span>web式的产品前途是比较看好的,而从技术面来看Q?span>flash式的 web app 往往又比 ajax 式的好一?span>(臛_?span> tool U这个领?span>)Q所?span> adobe 可以说是已经站在比较有利?span> positionQ这是很有趣也值得观察的事(而且要睁大眼睛好好看着)?/span>

10. Flash CS4 ?/strong> Fireworks

CS4Flash 部䆾有许多不错的新功能,例如可在 authoring time live preview video contentQ?span>timeline 大改?span>, tween 方式更自由,以及奇?span> IK 效果Q我惛_能掌握这些新东西的多媒体设计师来_q应该是非常的消息?/span>Fireworks 部䆾则是?span> flex 的整合,例如可在 fireworks 里制作组件与style/skin 然后直接输出?span> scale-9 ?span> swc l?span> flex 用,基本上都q是很粗的整合试Q未?span>12个月q要多努力?/span>

ȝ

lD以上 highlight 出来?span> 10点,如果你仔l去推敲每一点背后所代表的意义,q思考它们未来可能的影响力与冲击效应Q或怽会像我一栯得全w发热心跛_快?/span>基本上观察这?span> Max 揭露的消息,感觉很像在看高手对弈Q当你看到局中一步棋Ӟq道胜负已定,未来所有的步数皆已定Q结果只是时间问题,而更令h惊讶的是Q往往q致胜的一步是如此的不明显与不l意Q轻ȝ滑过决定了未来Q这才是真正让h自叹弗如的地斏V?/span>惛_q里Q只能说q真的是一?span> exciting timesQ很高兴能置w其中、亲自经历而不是在十年后回头来赞叹当年?/span>



gembin 2008-09-24 14:21 发表评论
]]>
Flex Shared Objecthttp://www.aygfsteel.com/gembin/archive/2008/09/23/230662.htmlgembingembinTue, 23 Sep 2008 06:15:00 GMThttp://www.aygfsteel.com/gembin/archive/2008/09/23/230662.htmlhttp://www.aygfsteel.com/gembin/comments/230662.htmlhttp://www.aygfsteel.com/gembin/archive/2008/09/23/230662.html#Feedback0http://www.aygfsteel.com/gembin/comments/commentRss/230662.htmlhttp://www.aygfsteel.com/gembin/services/trackbacks/230662.html阅读全文

gembin 2008-09-23 14:15 发表评论
]]>
Loading style sheets at run time (from adobe)http://www.aygfsteel.com/gembin/archive/2008/09/19/229935.htmlgembingembinFri, 19 Sep 2008 06:49:00 GMThttp://www.aygfsteel.com/gembin/archive/2008/09/19/229935.htmlhttp://www.aygfsteel.com/gembin/comments/229935.htmlhttp://www.aygfsteel.com/gembin/archive/2008/09/19/229935.html#Feedback0http://www.aygfsteel.com/gembin/comments/commentRss/229935.htmlhttp://www.aygfsteel.com/gembin/services/trackbacks/229935.html阅读全文

gembin 2008-09-19 14:49 发表评论
]]>
Flex3 RSLhttp://www.aygfsteel.com/gembin/archive/2008/09/18/229760.htmlgembingembinThu, 18 Sep 2008 09:40:00 GMThttp://www.aygfsteel.com/gembin/archive/2008/09/18/229760.htmlhttp://www.aygfsteel.com/gembin/comments/229760.htmlhttp://www.aygfsteel.com/gembin/archive/2008/09/18/229760.html#Feedback0http://www.aygfsteel.com/gembin/comments/commentRss/229760.htmlhttp://www.aygfsteel.com/gembin/services/trackbacks/229760.html阅读全文

gembin 2008-09-18 17:40 发表评论
]]>
Mate: Event driven framework for Flexhttp://www.aygfsteel.com/gembin/archive/2008/09/18/229734.htmlgembingembinThu, 18 Sep 2008 08:45:00 GMThttp://www.aygfsteel.com/gembin/archive/2008/09/18/229734.htmlhttp://www.aygfsteel.com/gembin/comments/229734.htmlhttp://www.aygfsteel.com/gembin/archive/2008/09/18/229734.html#Feedback0http://www.aygfsteel.com/gembin/comments/commentRss/229734.htmlhttp://www.aygfsteel.com/gembin/services/trackbacks/229734.html  阅读全文

gembin 2008-09-18 16:45 发表评论
]]>
Excluding font outlines in Flex can shave off over 200kb!http://www.aygfsteel.com/gembin/archive/2008/09/18/229673.htmlgembingembinThu, 18 Sep 2008 05:50:00 GMThttp://www.aygfsteel.com/gembin/archive/2008/09/18/229673.htmlhttp://www.aygfsteel.com/gembin/comments/229673.htmlhttp://www.aygfsteel.com/gembin/archive/2008/09/18/229673.html#Feedback0http://www.aygfsteel.com/gembin/comments/commentRss/229673.htmlhttp://www.aygfsteel.com/gembin/services/trackbacks/229673.html

Often when you need to embed a font you also need to include ‘bold’ and sometimes ‘italic’ 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 (’unicode-range’) 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’t expecting it to be so much so thought worth a blog ;)

@font-face {
src: url("assets/Arial.ttf");
fontFamily: Arial;
advancedAntiAliasing: true;
unicode-range: U+0030-U+0039, /* 0-9 */
U+0041-U+005A, /* Uppercase A-Z */
U+0061-U+007A, /* Lowercase a-z */
U+0021-U+002F, /* !"#$%&amp;'()*+,-./ */
U+003A-U+0040, /* :;&lt;=&gt;?@ */
U+005B-U+0060, /* [\]^_ */
U+00A3-U+00A3, /* £ */
U+00A9-U+00A9, /* © */
U+00AE-U+00AE /* ® */
/* U+00BF-U+0259 FOREIGN CHRS */
}

if anyone knows of other ranges you think can be generally useful please let me know ;)



gembin 2008-09-18 13:50 发表评论
]]>
Memory Profile of MXML vs AS3 for ItemRenderershttp://www.aygfsteel.com/gembin/archive/2008/09/18/229667.htmlgembingembinThu, 18 Sep 2008 05:33:00 GMThttp://www.aygfsteel.com/gembin/archive/2008/09/18/229667.htmlhttp://www.aygfsteel.com/gembin/comments/229667.htmlhttp://www.aygfsteel.com/gembin/archive/2008/09/18/229667.html#Feedback0http://www.aygfsteel.com/gembin/comments/commentRss/229667.htmlhttp://www.aygfsteel.com/gembin/services/trackbacks/229667.html阅读全文

gembin 2008-09-18 13:33 发表评论
]]>
Book: Learning Flex 3: Getting up to Speed with Rich Internet Applicationshttp://www.aygfsteel.com/gembin/archive/2008/09/10/228130.htmlgembingembinWed, 10 Sep 2008 05:31:00 GMThttp://www.aygfsteel.com/gembin/archive/2008/09/10/228130.htmlhttp://www.aygfsteel.com/gembin/comments/228130.htmlhttp://www.aygfsteel.com/gembin/archive/2008/09/10/228130.html#Feedback0http://www.aygfsteel.com/gembin/comments/commentRss/228130.htmlhttp://www.aygfsteel.com/gembin/services/trackbacks/228130.html阅读全文

gembin 2008-09-10 13:31 发表评论
]]>
Flex 3 Compiler Design(from adobe)http://www.aygfsteel.com/gembin/archive/2008/09/10/228089.htmlgembingembinWed, 10 Sep 2008 03:01:00 GMThttp://www.aygfsteel.com/gembin/archive/2008/09/10/228089.htmlhttp://www.aygfsteel.com/gembin/comments/228089.htmlhttp://www.aygfsteel.com/gembin/archive/2008/09/10/228089.html#Feedback0http://www.aygfsteel.com/gembin/comments/commentRss/228089.htmlhttp://www.aygfsteel.com/gembin/services/trackbacks/228089.html阅读全文

gembin 2008-09-10 11:01 发表评论
]]>
List of 33 Flex APIs, Libraries, Components and Toolshttp://www.aygfsteel.com/gembin/archive/2008/09/05/227204.htmlgembingembinFri, 05 Sep 2008 06:03:00 GMThttp://www.aygfsteel.com/gembin/archive/2008/09/05/227204.htmlhttp://www.aygfsteel.com/gembin/comments/227204.htmlhttp://www.aygfsteel.com/gembin/archive/2008/09/05/227204.html#Feedback0http://www.aygfsteel.com/gembin/comments/commentRss/227204.htmlhttp://www.aygfsteel.com/gembin/services/trackbacks/227204.html阅读全文

gembin 2008-09-05 14:03 发表评论
]]>
Flex资料http://www.aygfsteel.com/gembin/archive/2008/09/04/226924.htmlgembingembinThu, 04 Sep 2008 06:17:00 GMThttp://www.aygfsteel.com/gembin/archive/2008/09/04/226924.htmlhttp://www.aygfsteel.com/gembin/comments/226924.htmlhttp://www.aygfsteel.com/gembin/archive/2008/09/04/226924.html#Feedback0http://www.aygfsteel.com/gembin/comments/commentRss/226924.htmlhttp://www.aygfsteel.com/gembin/services/trackbacks/226924.html阅读全文

gembin 2008-09-04 14:17 发表评论
]]>
Eclipse vs OSGI and Solstice vs RCPhttp://www.aygfsteel.com/gembin/archive/2008/08/26/224476.htmlgembingembinTue, 26 Aug 2008 06:05:00 GMThttp://www.aygfsteel.com/gembin/archive/2008/08/26/224476.htmlhttp://www.aygfsteel.com/gembin/comments/224476.htmlhttp://www.aygfsteel.com/gembin/archive/2008/08/26/224476.html#Feedback0http://www.aygfsteel.com/gembin/comments/commentRss/224476.htmlhttp://www.aygfsteel.com/gembin/services/trackbacks/224476.html阅读全文

gembin 2008-08-26 14:05 发表评论
]]>
flex 各组件对应的样式属?/title><link>http://www.aygfsteel.com/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.aygfsteel.com/gembin/archive/2008/08/22/223669.html</guid><wfw:comment>http://www.aygfsteel.com/gembin/comments/223669.html</wfw:comment><comments>http://www.aygfsteel.com/gembin/archive/2008/08/22/223669.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/gembin/comments/commentRss/223669.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/gembin/services/trackbacks/223669.html</trackback:ping><description><![CDATA[     摘要:   <a href='http://www.aygfsteel.com/gembin/archive/2008/08/22/223669.html'>阅读全文</a><img src ="http://www.aygfsteel.com/gembin/aggbug/223669.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/gembin/" target="_blank">gembin</a> 2008-08-22 10:19 <a href="http://www.aygfsteel.com/gembin/archive/2008/08/22/223669.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Flex事g机制的工作流E?http://www.aygfsteel.com/gembin/archive/2008/08/22/223668.htmlgembingembinFri, 22 Aug 2008 02:17:00 GMThttp://www.aygfsteel.com/gembin/archive/2008/08/22/223668.htmlhttp://www.aygfsteel.com/gembin/comments/223668.htmlhttp://www.aygfsteel.com/gembin/archive/2008/08/22/223668.html#Feedback0http://www.aygfsteel.com/gembin/comments/commentRss/223668.htmlhttp://www.aygfsteel.com/gembin/services/trackbacks/223668.html事g机制的工作流E?/span>

关于事g?/strong>

目标对象Q派发事件的对象
当事件发生后生成一个携带数据的对象Q然后检查目标对象是否存在显C层中,q历从根容器一直到目标对象所在位|的所有对象,以树形势表示。自动检所l过的节Ҏ否注册了监听器?br id="e5.g" />
事g暗q行程分ؓ3步:
  • 捕获阶段Q捕获事?capturingQ从根节点开始顺序而下Q检每个节Ҏ否注册了监听器。同ӞFlex 事件对象的currentTarget 值改为当前正在检的对象。如果注册了监听器,则调用监听函数?br id="y1rr3" />
  • 目标阶段Q检目标的监听?targetingQ触发在目标对象本n注册的监听程?br id="ti7p" />
  • 冒阶段Q事件冒?bubblingQ从目标节点到根节点Q检每个节Ҏ否注册了监听器,如果有,则调用监听函数?/li>

每个事g对象都有以下属性:
targetQ事件的z֏?br id="oani0" /> currentTargetQ当前正在检的的对象,帮助跟踪事g传播的过E?br id="vp2g" />
默认情况下,捕获功能处于关闭状态,一般没有必要进行捕莯t?br id="tcta" /> 事g只在bubbles 属性ؓtrue 时才q行冒Q可以冒泡的事g包括Qchange、click、doubleClick、keyDown、keyUp、mouseDown? mouseUp。ƈ且不能在一个监听器中同时打开捕获和冒泡功能,要做到这一点,只能注册两个监听器,分别实现?br id="r61a" />
现在来看一个例子:
Xml代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="initApp()">     
  3.     <mx:Style source="style.css" />  
  4.      
  5.     <mx:Script>  
  6.         <![CDATA[ 
  7.             import flash.events.MouseEvent; 
  8.             
  9.             internal function initApp():void{ 
  10.                 canvas_1.addEventListener(MouseEvent.CLICK,pressBtn,true); 
  11.                 canvas_2.addEventListener(MouseEvent.CLICK,pressBtn); 
  12.                 btn_1.addEventListener(MouseEvent.CLICK,pressBtn); 
  13.                 btn_2.addEventListener(MouseEvent.CLICK,pressBtn); 
  14.             } 
  15.             internal function output(msg:String):void{ 
  16.                 debug_txt.text += msg+"\n"; 
  17.             }            
  18.             internal function pressBtn(evt:MouseEvent):void{ 
  19.                 output("是否冒--"+evt.bubbles); 
  20.                 output("目标对象-- "+evt.target+" -- "+evt.eventPhase); 
  21.                 output("遍历对象-- "+evt.currentTarget); 
  22.                 output("------------"); 
  23.             } 
  24.         ]]>  
  25.     </mx:Script>  
  26.     <mx:Canvas id = "canvas_1" styleName="box" x="37" y="63" width="445" height="216">  
  27.         <mx:Text x="13" y="10" text="Canvas_1"/>  
  28.         <mx:Canvas id="canvas_2" styleName="box" x="10" y="102" width="173" height="90">  
  29.             <mx:Text x="10" y="10" text="Canvas_2"/>  
  30.             <mx:Button id = "btn_2" x="10" y="38" label="Button_2"/>             
  31.         </mx:Canvas>  
  32.         <mx:Button id="btn_1" x="16" y="38" label="Button_1"/>  
  33.     </mx:Canvas>  
  34.     <mx:TextArea id="debug_txt" styleName="textBox" x="37" y="304" height="198" width="445"/>  
  35.      
  36. </mx:Application>  
 
在监听函?pressBtn 中的属性说明:
  • targetQ派发事件的目标对象
  • currentTargetQ事件流当前正经q的目标对象
  • bubblesQ是否打开了冒泡功?/li>
  • eventPhaseQ事件流当前的阶D,1Q捕P2Q目标,3Q冒?/li>


addEventListener(
  type:String,    事g的类?br id="vsyt0" />   listener:Function,    监听函数
  useCapture:Boolean = false,    是否打开捕获功能
  priority:int = 0,    监听器优先?br id="vsyt3" />   useWeakReference:Boolean = false    是否使用弱引?br id="vsyt4" /> )

如果useCapture 为trueQ打开了捕获功能,则该lg的冒泡阶D被取消?br id="e-a:" /> 只有可视化的对象?个阶D,而像XML{非可视化对象只有目标阶Dc?/p>

 

 

8.2.2 事g对象

EventDispatcher 是派发事件的武器Q经它派发的事g对象必须是Eventcd或者Event的子cR?br id="ylal" /> Event对象中包含目标对象存攄数据Q这些数据都成ؓEvent的属性,以供侦听器用:
Event的属性:
  • bubblesQ只读,布尔Q事件是否开启冒泡功?/li>
  • cancelableQ只读,布尔Q处理事件的默认行ؓ是否可以停止。主要针对一些系l事Ӟ如果gؓtrueQ则Event的preventDefaultҎ可以使用Q否则不可用?/li>
  • currentTargetQ只读,对象Q当前正在调用监听器的对?/li>
  • eventPhaseQ只读,整数Q返回事件流正经历的阶段?Q捕P2Q目标,3Q冒?/li>
  • targetQ只读,z֏事g的目标对?/li>
  • typeQ只读,字符Q事件类型。比如鼠标点M件的cdQclickQƈ被定义ؓ帔RQMouseEvent.CLICK

构造函敎ͼ
Event(
  type:String,    事gcd
  bubbles:Boolean = false,   是否冒
  cancelable:Boolean = false  是否可以停止
)

Event 的方法:
  • isDefaultPreventedQ判断preventDefault 是否已经被调?br id="fs65" />
  • preventDefaultQ停止事件的默认行ؓ。针对一些系l事Ӟcancelable为true时才可用?/li>
  • stopImmediatePropagationQ停止当前的事g传播,包括当前正在处理的对?/li>
  • stopPropagationQ停止当前的事g传播,但不会停止当前正在处理的对象

 

Xml代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="initApp()">     
  3.     <mx:Style source="style.css" />  
  4.      
  5.     <mx:Script>  
  6.         <![CDATA[ 
  7.             import flash.events.MouseEvent; 
  8.             
  9.             internal function initApp():void{ 
  10.                 canvas_1.addEventListener(MouseEvent.CLICK,CanvasHandler); 
  11.                 canvas_2.addEventListener(MouseEvent.CLICK,CanvasHandler); 
  12.                 canvas_2.addEventListener(MouseEvent.CLICK,pressBtn); 
  13.                 btn_1.addEventListener(MouseEvent.CLICK,pressBtn); 
  14.             } 
  15.             internal function output(msg:String):void{ 
  16.                 debug_txt.text += msg+"\n"; 
  17.             } 
  18.             
  19.             internal function pressBtn(evt:MouseEvent):void{ 
  20.  
  21.                 output("是否冒--"+evt.bubbles); 
  22.                 output("目标对象-- "+evt.target+" -- "+evt.eventPhase); 
  23.                 output("遍历对象-- "+evt.currentTarget); 
  24.                 output("------------");        
  25.             } 
  26.             internal function CanvasHandler(evt:MouseEvent):void{ 
  27.                 
  28.                 output("目标对象-- "+evt.currentTarget+" -- "+evt.eventPhase); 
  29.                 //停止事g的传播 
  30.                 evt.stopImmediatePropagation(); 
  31.                 //evt.stopPropagation(); 
  32.             } 
  33.         ]]>  
  34.     </mx:Script>  
  35.     <mx:Canvas id = "canvas_1" styleName="box" x="37" y="63" width="425" height="160">  
  36.         <mx:Text x="13" y="10" text="Canvas_1"/>  
  37.         <mx:Canvas id="canvas_2" styleName="box" x="10" y="52" width="173" height="90">  
  38.             <mx:Text x="10" y="10" text="Canvas_2"/>  
  39.             <mx:Button id = "btn_1" x="10" y="38" label="Button_1"/>             
  40.         </mx:Canvas>  
  41.     </mx:Canvas>  
  42.     <mx:TextArea id="debug_txt" styleName="textBox" x="37" y="245" height="198" width="425"/>  
  43.      
  44. </mx:Application>  

 

8.2.3 侦听和响应事?-一个侦听键盘事件的例子

要侦听一个事Ӟ首先要创Z个函数来作ؓ事g处理器,然后这个函数注册给相应的时间类型?br id="xoi9" /> this.addEventListener(KeyboardEvent.KEY_DOWN,keyHandler);
注册键盘按下事gQ交lkeyHandler处理Q也可以在Application标签d事gQ?br id="arpa" /> keyDown="keyHandler(event)"  q种情况无法U除事g?br id="zevr" />
注册了事件监听器Q用完毕后Q必M用removeEcentListener Ҏ删除监听函数Q?br id="zevr1" /> removeEcentListener(
  type:String,   事gcd
  listener:Function,   监听函数
  useCapture:Boolean = false    是否开启捕获功能,如果注册时打开Q移除也要打开?br id="zevr5" /> )

Xml代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"  
  3.      creationComplete="initApp()">  
  4.     <mx:Style source="style.css" />     
  5.     <mx:Script>  
  6.         <![CDATA[ 
  7.             import flash.events.KeyboardEvent; 
  8.  
  9.             internal function initApp():void{ 
  10.                 this.addEventListener(KeyboardEvent.KEY_DOWN,keyHandler); 
  11.             } 
  12.  
  13.             private function keyHandler(e:KeyboardEvent):void{ 
  14.  
  15.                 var str:String = "你按下的? "+e.keyCode;                
  16.                 debug_txt.text += str +"\n"; 
  17.             } 
  18.         ]]>  
  19.     </mx:Script>     
  20.     <mx:TextArea id="debug_txt" styleName="textBox" x="25" y="78" height="198" width="212" editable="false"/>  
  21.     <mx:Text x="25" y="50" text="按键盘上的Q意键"/>  
  22. </mx:Application> 


gembin 2008-08-22 10:17 发表评论
]]>
Flex modules http://www.aygfsteel.com/gembin/archive/2008/08/21/223522.htmlgembingembinThu, 21 Aug 2008 07:33:00 GMThttp://www.aygfsteel.com/gembin/archive/2008/08/21/223522.htmlhttp://www.aygfsteel.com/gembin/comments/223522.htmlhttp://www.aygfsteel.com/gembin/archive/2008/08/21/223522.html#Feedback0http://www.aygfsteel.com/gembin/comments/commentRss/223522.htmlhttp://www.aygfsteel.com/gembin/services/trackbacks/223522.htmlThis section describes modules and how they are used by modular applications.

Subtopics

About modules
Benefits of modules
Module API details
Creating modular applications

About modules

Modules 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.

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.

Modular applications have the following benefits:

  • Smaller initial download size of the SWF file.
  • Shorter load time due to smaller SWF file size.
  • 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.

Benefits of modules

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.

Two common scenarios in which using modules is beneficial are a large application with different user paths and a portal application.

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.

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.

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.

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.

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.

Module API details

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.

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.

The following image shows the relationship between the shell and the module's interfaces:

 


Relationship between shell application and the module's interfaces.

Creating modular applications

To create a modular application, you create separate classes for each module, plus an application that loads the modules.

To create a modular application:

  1. Create any number of modules. An MXML-based module file's root tag is <mx:Module>. ActionScript-based modules extend the ModuleBase class.
  2. 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.
  3. Create an Application class. This is typically an MXML file whose root tag is <mx:Application>, but it can also be an ActionScript-only application.
  4. In the Application file, use an <mx:ModuleLoader> tag to load each of the modules. You can also do this by using the load() method of the mx.modules.ModuleLoader class. For classes that extend ModuleBase, you should use the methods of the ModuleManager class to load them.

The following sections describes these steps in detail.


Creating modules

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 <mx:Module>. 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.

The following example is a module that includes a Chart control:

<?xml version="1.0"?>
<!-- modules/ColumnChartModule.mxml -->
<mx:Module xmlns:mx="http://www.adobe.com/2006/mxml" width="100%" height="100%" >
<mx:Script><![CDATA[
import mx.collections.ArrayCollection;
[Bindable]
public var expenses:ArrayCollection = new ArrayCollection([
{Month:"Jan", Profit:2000, Expenses:1500},
{Month:"Feb", Profit:1000, Expenses:200},
{Month:"Mar", Profit:1500, Expenses:500}
]);
]]></mx:Script>
<mx:ColumnChart id="myChart" dataProvider="{expenses}">
<mx:horizontalAxis>
<mx:CategoryAxis
dataProvider="{expenses}"
categoryField="Month"
/>
</mx:horizontalAxis>
<mx:series>
<mx:ColumnSeries
xField="Month"
yField="Profit"
displayName="Profit"
/>
<mx:ColumnSeries
xField="Month"
yField="Expenses"
displayName="Expenses"
/>
</mx:series>
</mx:ColumnChart>
<mx:Legend dataProvider="{myChart}"/>
</mx:Module>

Compiling modules

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:

mxmlc MyModule.mxml

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.

Subtopics

Controlling module size
Recompiling modules

Controlling module size

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.

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.

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 load-externs compiler option.

To create a linker report:

  1. Generate the linker report:
    mxmlc -link-report=report.xml MyApplication.mxml
  2. Compile the application SWF file:
    mxmlc MyApplication.mxml
  3. Compile the module:
    mxmlc -load-externs=report.xml MyModule.mxml

Recompiling modules

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.

NOTE

 

If you externalize the module's dependencies by using the load-externs 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.


MXML-based modules can load other modules. Those modules can load other modules, and so on.

Loading and unloading modules

To load and unload modules you use the load() and unload() methods of the ModuleLoader class. These methods take no parameters; the ModuleLoader loads or unloads the module that matches the value of the current url property.

The following example loads and unloads the module when you click the button:

<?xml version="1.0"?>
<!-- modules/ASModuleLoaderApp.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
import mx.modules.*;

public function createModule(m:ModuleLoader, s:String):void {
if (!m.url) {
m.url = s;
return;
}
m.loadModule();
}

public function removeModule(m:ModuleLoader):void {
m.unloadModule();
}
]]>
</mx:Script>

<mx:Panel title="Module Example"
height="90%"
width="90%"
paddingTop="10"
paddingLeft="10"
paddingRight="10"
paddingBottom="10"
>
<mx:TabNavigator id="tn"
width="100%"
height="100%"
creationPolicy="auto"
>
<mx:VBox id="vb1" label="Column Chart Module">
<mx:Button
label="Load"
click="createModule(chartModuleLoader, l1.text)"
/>
<mx:Button
label="Unload"
click="removeModule(chartModuleLoader)"
/>
<mx:Label id="l1" text="ColumnChartModule.swf"/>
<mx:ModuleLoader id="chartModuleLoader"/>
</mx:VBox>

<mx:VBox id="vb2" label="Form Module">
<mx:Button
label="Load"
click="createModule(formModuleLoader, l2.text)"
/>
<mx:Button
label="Unload"
click="removeModule(formModuleLoader)"
/>
<mx:Label id="l2" text="FormModule.swf"/>
<mx:ModuleLoader id="formModuleLoader"/>
</mx:VBox>
</mx:TabNavigator>
</mx:Panel>
</mx:Application>

Setting the location of a ModuleLoader triggers a call to the loadModule() method, too. This occurs when you first create a ModuleLoader with the url property set. It also occurs if you change the value of that property.

The following example loads the modules without calling the loadModule() method because the url property is set on the <mx:ModuleLoader> tags:

<?xml version="1.0"?>
<!-- modules/URLModuleLoaderApp.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Panel
title="Module Example"
height="90%"
width="90%"
paddingTop="10"
paddingLeft="10"
paddingRight="10"
paddingBottom="10"
>

<mx:Label width="100%" color="blue"
text="Select the tabs to change the panel."/>

<mx:TabNavigator id="tn"
width="100%"
height="100%"
creationPolicy="auto"
>
<mx:VBox id="vb1" label="Column Chart Module">
<mx:Label id="l1" text="ColumnChartModule.swf"/>
<mx:ModuleLoader url="ColumnChartModule.swf"/>
</mx:VBox>

<mx:VBox id="vb2" label="Form Module">
<mx:Label id="l2" text="FormModule.swf"/>
<mx:ModuleLoader url="FormModule.swf"/>
</mx:VBox>

</mx:TabNavigator>
</mx:Panel>
</mx:Application>

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 load() method for that module.

Modules are loaded into the child of the current application domain. You can specify a different application domain by using the applicationDomain property of the ModuleLoader class.

When two classes of the same name but different implementations are loaded, the first one loaded is the one that is used.

Subtopics

Loading modules from different servers

Loading modules from different servers

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.

To allow access across domains:

  1. In your loading application, you must call the allowDomain() 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.
  2. 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.
  3. Load the cross-domain file on the remote server in the preinitialize event handler of your loading application.
  4. In the loaded module, call the allowDomain() method so that it can communicate with the loader.

The following example shows the init() method of the loading application:

public function setup():void {
Security.allowDomain("remoteservername");
Security.loadPolicyFile("http://remoteservername/crossdomain.xml");
var request:URLRequest = new URLRequest("http://remoteservername
/crossdomain.xml");
var loader:URLLoader = new URLLoader();
loader.load(request);
}

The following example shows the loaded module's init() method:

public function initMod():void {
Security.allowDomain("loaderservername");
}

The following example shows the cross-domain file that resides on the remote server:

<!-- crossdomain.xml file located at the root of the server -->
<cross-domain-policy>
<allow-access-from domain="loaderservername" to-ports="*"/>
</cross-domain-policy>

For more information about using the cross-domain policy file, see Applying Flex Security in Building and Deploying Flex 2 Applications.

Using ModuleLoader events

The ModuleLoader class triggers several events, including setup, ready, loading, unload, progress, error, and urlChanged. 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.

Subtopics

Using the error event
Using the progress event

Using the error event

The error 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 error 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.

Revision 1/10/2007: Minor change to createModule() method.

<?xml version="1.0"?>
<!-- modules/ErrorEventHandler.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
import mx.events.ModuleEvent;
import mx.modules.*;
import mx.controls.Alert;

private function errorHandler(e:ModuleEvent):void {
Alert.show("There was an error loading the module." +
" Please contact the Help Desk.");
trace(e.errorText);
}

public function createModule():void {
if (chartModuleLoader.url == ti1.text) {
// If they are the same, call loadModule.
chartModuleLoader.loadModule();
} else {
// If they are not the same, then change the url,
// which triggers a call to the loadModule() method.
chartModuleLoader.url = ti1.text;
}
}

public function removeModule():void {
chartModuleLoader.unloadModule();
}

]]>
</mx:Script>

<mx:Panel title="Module Example"
height="90%"
width="90%"
paddingTop="10"
paddingLeft="10"
paddingRight="10"
paddingBottom="10"
>
<mx:HBox>
<mx:Label text="URL:"/>
<mx:TextInput width="200" id="ti1" text="ColumnChartModule.swf"/>
<mx:Button label="Load" click="createModule()"/>
<mx:Button label="Unload" click="removeModule()"/>
</mx:HBox>
<mx:ModuleLoader id="chartModuleLoader" error="errorHandler(event)"/>
</mx:Panel>
</mx:Application>

Using the progress event

You can use the progress event to track the progress of a module as it loads. When you add a listener for the progress 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 bytesLoaded property of the event. You can compare this to the bytesTotal property to get a percentage of completion.

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.

<?xml version="1.0"?>
<!-- modules/SimpleProgressEventHandler.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
import mx.events.ModuleEvent;
import flash.events.ProgressEvent;
import mx.modules.*;

[Bindable]
public var progBar:String = "";
[Bindable]
public var progMessage:String = "";

private function progressEventHandler(e:ProgressEvent):void {
progBar += ".";
progMessage =
"Module " +
Math.round((e.bytesLoaded/e.bytesTotal) * 100) +
"% loaded";
}

public function createModule():void {
chartModuleLoader.loadModule();
}

public function removeModule():void {
chartModuleLoader.unloadModule();
progBar = "";
progMessage = "";
}
]]>
</mx:Script>

<mx:Panel title="Module Example"
height="90%"
width="90%"
paddingTop="10"
paddingLeft="10"
paddingRight="10"
paddingBottom="10"
>
<mx:HBox>
<mx:Label id="l2" text="{progMessage}"/>
<mx:Label id="l1" text="{progBar}"/>
</mx:HBox>

<mx:Button label="Load" click="createModule()"/>
<mx:Button label="Unload" click="removeModule()"/>

<mx:ModuleLoader
id="chartModuleLoader"
url="ColumnChartModule.swf"
progress="progressEventHandler(event)"
/>
</mx:Panel>
</mx:Application>

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.

<?xml version="1.0"?>
<!-- modules/MySimpleModuleLoader.mxml -->
<mx:ModuleLoader xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
private function clickHandler():void {
if (!url) {
url="ColumnChartModule.swf";
}
loadModule();
}
]]>
</mx:Script>

<mx:ProgressBar
id="progress"
width="100%"
source="{this}"
/>
<mx:HBox width="100%">
<mx:Button
id="load"
label="Load"
click="clickHandler()"
/>
<mx:Button
id="unload"
label="Unload"
click="unloadModule()"
/>
<mx:Button
id="reload"
label="Reload"
click="unloadModule();loadModule();"
/>
</mx:HBox>
</mx:ModuleLoader>

You can use this module in a simple application, as the following example shows:

<?xml version="1.0"?>
<!-- modules/ComplexProgressEventHandler.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:local="*">

<mx:Panel title="Module Example"
height="90%"
width="90%"
paddingTop="10"
paddingLeft="10"
paddingRight="10"
paddingBottom="10"
>
<mx:Label text="Use the buttons below to load and unload
the module."/>
<local:MySimpleModuleLoader id="customLoader"/>
</mx:Panel>

</mx:Application>

This example does not change the ProgressBar's label property for all events. For example, if you load and then unload the module, the label property remains at "LOADING 100%". To adjust the label properly, you must define other event handlers for the ModuleLoader events, such as unload and error.



gembin 2008-08-21 15:33 发表评论
]]>
Top 10 Adobe Flex Misconceptionshttp://www.aygfsteel.com/gembin/archive/2008/08/15/222221.htmlgembingembinFri, 15 Aug 2008 05:30:00 GMThttp://www.aygfsteel.com/gembin/archive/2008/08/15/222221.htmlhttp://www.aygfsteel.com/gembin/comments/222221.htmlhttp://www.aygfsteel.com/gembin/archive/2008/08/15/222221.html#Feedback0http://www.aygfsteel.com/gembin/comments/commentRss/222221.htmlhttp://www.aygfsteel.com/gembin/services/trackbacks/222221.html阅读全文

gembin 2008-08-15 13:30 发表评论
]]>
Flex in a Week(study...)http://www.aygfsteel.com/gembin/archive/2008/08/14/222015.htmlgembingembinThu, 14 Aug 2008 07:16:00 GMThttp://www.aygfsteel.com/gembin/archive/2008/08/14/222015.htmlhttp://www.aygfsteel.com/gembin/comments/222015.htmlhttp://www.aygfsteel.com/gembin/archive/2008/08/14/222015.html#Feedback0http://www.aygfsteel.com/gembin/comments/commentRss/222015.htmlhttp://www.aygfsteel.com/gembin/services/trackbacks/222015.html阅读全文

gembin 2008-08-14 15:16 发表评论
]]>
一比较全面的FlashQFlex相关技术资源大??http://www.aygfsteel.com/gembin/archive/2008/08/12/221473.htmlgembingembinTue, 12 Aug 2008 05:32:00 GMThttp://www.aygfsteel.com/gembin/archive/2008/08/12/221473.htmlhttp://www.aygfsteel.com/gembin/comments/221473.htmlhttp://www.aygfsteel.com/gembin/archive/2008/08/12/221473.html#Feedback3http://www.aygfsteel.com/gembin/comments/commentRss/221473.htmlhttp://www.aygfsteel.com/gembin/services/trackbacks/221473.html阅读全文

gembin 2008-08-12 13:32 发表评论
]]>
վ֩ģ壺 | ±| | Ϻӿ| ͷ| Ϲ| | | | | ˱| | Ӫ| | ĩ| | ˮ| | | ֥| | ÷| | | α| ƽ| | ɰ| ޭ| ¹| | | | | | | «| | Ű| ʤ| |