﻿<?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-鼠标的咖啡屋-随笔分类-Flex</title><link>http://www.blogjava.net/tj19832/category/29073.html</link><description>这个人很懒，什么也没有留下</description><language>zh-cn</language><lastBuildDate>Sun, 16 Mar 2008 20:10:19 GMT</lastBuildDate><pubDate>Sun, 16 Mar 2008 20:10:19 GMT</pubDate><ttl>60</ttl><item><title>Alert,TitleWindow以及PopUp的简单分析</title><link>http://www.blogjava.net/tj19832/archive/2008/03/17/186677.html</link><dc:creator>咖啡屋的鼠标</dc:creator><author>咖啡屋的鼠标</author><pubDate>Sun, 16 Mar 2008 16:22:00 GMT</pubDate><guid>http://www.blogjava.net/tj19832/archive/2008/03/17/186677.html</guid><wfw:comment>http://www.blogjava.net/tj19832/comments/186677.html</wfw:comment><comments>http://www.blogjava.net/tj19832/archive/2008/03/17/186677.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tj19832/comments/commentRss/186677.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tj19832/services/trackbacks/186677.html</trackback:ping><description><![CDATA[这两天为了Fluorida的closePopUp功能，读了点Flex框架的源码，对Alert，TitleWindow以及Flex的PopUp功能做了简单的分析。<br />
【Alert和PopUp】<br />
Alert内部其实是调用了PopUpManager.在parent参数为null或者为Application的时候，弹出的窗口将跟当前Application在一个容器下。Alert在最顶层，Application在最底层，中间那层是一个称之为modalWindows的控件，其实就是Alert后面那个磨砂的层。为了点到Alert上的按钮，写了一个小程序分析Alert的结构，不是很好读，但是可以运行一下，看看分析出的Alert的内部结构：（大略说一下，Alert的Child有一个AlertForm，而AlertForm的Child除了第一个是TextField以外，都是按钮）<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">&lt;?</span><span style="color: #ff00ff;">xml&nbsp;version="1.0"&nbsp;encoding="utf-8"</span><span style="color: #0000ff;">?&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">mx:Application&nbsp;</span><span style="color: #ff0000;">xmlns:mx</span><span style="color: #0000ff;">="http://www.adobe.com/2006/mxml"</span><span style="color: #ff0000;">&nbsp;layout</span><span style="color: #0000ff;">="horizontal"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">mx:Script</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;![CDATA[</span><span style="color: #808080;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;mx.core.IChildList;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;mx.core.UIComponent;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;mx.core.IFlexDisplayObject;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;mx.managers.ISystemManager;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;mx.managers.PopUpManagerChildList;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;mx.managers.PopUpManager;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;mx.controls.Alert;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;mx.events.CloseEvent;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;mx.core.Singleton;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;mx.managers.IPopUpManager;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;function&nbsp;showSimpleAlert():void{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Alert.okLabel="oKey";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Alert.show("Hello,&nbsp;World!","",15,null,alertCloseHandle);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;myTimer:Timer&nbsp;=&nbsp;new&nbsp;Timer(1000,&nbsp;1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myTimer.addEventListener("timer",&nbsp;timerHandler);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myTimer.start();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;function&nbsp;alertCloseHandle(event:CloseEvent):void{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;simpleAlertShower.label&nbsp;=&nbsp;event.detail.toString();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;function&nbsp;timerHandler(event:TimerEvent):void{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;text:String&nbsp;=&nbsp;"elements:";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;sm:ISystemManager&nbsp;=&nbsp;(Application.application.root&nbsp;as&nbsp;ISystemManager);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text+=sm.numChildren.toString();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text+=";\n&nbsp;modalWindows:";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text+=sm.numModalWindows.toString();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(var&nbsp;index:int&nbsp;=&nbsp;0;&nbsp;index&nbsp;&lt;&nbsp;sm.numChildren;&nbsp;index++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text&nbsp;+=&nbsp;"\n"&nbsp;+&nbsp;index&nbsp;+&nbsp;"&nbsp;:&nbsp;";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text&nbsp;+=&nbsp;sm.getChildAt(index).toString();&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;alert:Alert&nbsp;=&nbsp;sm.getChildAt(sm.numChildren&nbsp;-&nbsp;1)&nbsp;as&nbsp;Alert;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text&nbsp;+=&nbsp;"\n&nbsp;buttonFlags&nbsp;:&nbsp;"+alert.buttonFlags;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text&nbsp;+=&nbsp;"\n&nbsp;alertChildren:"&nbsp;+&nbsp;alert.numChildren;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(var&nbsp;index:int&nbsp;=&nbsp;0;&nbsp;index&nbsp;&lt;&nbsp;alert.numChildren;&nbsp;index++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text&nbsp;+="\n"&nbsp;+&nbsp;alert.getChildAt(index).toString();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;alertForm:UIComponent&nbsp;=&nbsp;alert.getChildAt(0)&nbsp;as&nbsp;UIComponent;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text&nbsp;+=&nbsp;"\n&nbsp;alertFormChildren:"&nbsp;+&nbsp;alertForm.numChildren;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(var&nbsp;index:int&nbsp;=&nbsp;0;&nbsp;index&nbsp;&lt;&nbsp;alertForm.numChildren;&nbsp;index++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text&nbsp;+="\n"+index+":"+&nbsp;alertForm.getChildAt(index).toString();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;popupChildText.text&nbsp;=&nbsp;text;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alertForm.getChildAt(1).dispatchEvent(new&nbsp;MouseEvent(MouseEvent.CLICK));<br />
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;popupContainer:IChildList&nbsp;=&nbsp;(application.root&nbsp;as&nbsp;IChildList);<br />
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PopUpManager.removePopUp(popupContainer.getChildAt(&nbsp;popupContainer.numChildren&nbsp;-&nbsp;1&nbsp;)&nbsp;as&nbsp;IFlexDisplayObject);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">]]&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">mx:Script</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">mx:Button&nbsp;</span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="simpleAlertShower"</span><span style="color: #ff0000;">&nbsp;click</span><span style="color: #0000ff;">="showSimpleAlert();"</span><span style="color: #ff0000;">&nbsp;label</span><span style="color: #0000ff;">="Click&nbsp;Me"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">mx:Text&nbsp;</span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="popupChildText"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">mx:Application</span><span style="color: #0000ff;">&gt;</span></div>
【关于TitleWindow】<br />
TitleWindow作为弹出窗口的时候，跟Alert处的位置没什么区别，我想说的是TitleWindow的closeButton在哪里。下面这个同样不好读的程序可以帮助你分析TitleWindow或者说Panel里面都有用什么，以及closeButton在哪，其实就是在rawChildren的最后一个。<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">&lt;?</span><span style="color: #ff00ff;">xml&nbsp;version="1.0"&nbsp;encoding="utf-8"</span><span style="color: #0000ff;">?&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">mx:Application&nbsp;</span><span style="color: #ff0000;">xmlns:mx</span><span style="color: #0000ff;">="http://www.adobe.com/2006/mxml"</span><span style="color: #ff0000;">&nbsp;layout</span><span style="color: #0000ff;">="horizontal"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">mx:Script</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;![CDATA[</span><span style="color: #808080;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;mx.containers.TitleWindow;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;mx.core.IChildList;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;mx.core.UIComponent;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;mx.core.IFlexDisplayObject;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;mx.managers.ISystemManager;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;mx.managers.PopUpManagerChildList;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;mx.managers.PopUpManager;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;mx.controls.Alert;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;mx.events.CloseEvent;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;mx.core.Singleton;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;mx.managers.IPopUpManager;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;function&nbsp;showSimpleAlert():void{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;popUpWindow:TitleWindow&nbsp;=&nbsp;TitleWindow(PopUpManager.createPopUp(this,TitleWindow,true));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;popUpWindow.width&nbsp;=&nbsp;400;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;popUpWindow.height&nbsp;=&nbsp;300;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;popUpWindow.visible&nbsp;=&nbsp;true;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;popUpWindow.showCloseButton&nbsp;=&nbsp;true;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;myTimer:Timer&nbsp;=&nbsp;new&nbsp;Timer(2000,&nbsp;1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myTimer.addEventListener("timer",&nbsp;timerHandler);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myTimer.start();&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;function&nbsp;alertCloseHandle(event:CloseEvent):void{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;simpleAlertShower.label&nbsp;=&nbsp;event.detail.toString();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;function&nbsp;timerHandler(event:TimerEvent):void{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;text:String&nbsp;=&nbsp;"elements:";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;sm:ISystemManager&nbsp;=&nbsp;(Application.application.root&nbsp;as&nbsp;ISystemManager);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text+=sm.numChildren.toString();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text+=";\n&nbsp;modalWindows:";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text+=sm.numModalWindows.toString();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text+="\n&nbsp;top&nbsp;children:&nbsp;";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(var&nbsp;index:int&nbsp;=&nbsp;0;&nbsp;index&nbsp;&lt;&nbsp;sm.numChildren;&nbsp;index++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text&nbsp;+=&nbsp;"\n"&nbsp;+&nbsp;index&nbsp;+&nbsp;"&nbsp;:&nbsp;";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text&nbsp;+=&nbsp;sm.getChildAt(index).toString();&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;titleWindow:TitleWindow&nbsp;=&nbsp;sm.getChildAt(sm.numChildren&nbsp;-&nbsp;1)&nbsp;as&nbsp;TitleWindow;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text&nbsp;+=&nbsp;"\n&nbsp;popUpWindowrawChildren:"&nbsp;+&nbsp;titleWindow.rawChildren.numChildren;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(var&nbsp;index:int&nbsp;=&nbsp;0;&nbsp;index&nbsp;&lt;&nbsp;titleWindow.rawChildren.numChildren;&nbsp;index++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text&nbsp;+="\n"&nbsp;+&nbsp;titleWindow.rawChildren.getChildAt(index).toString();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;titleBar:UIComponent&nbsp;=&nbsp;(titleWindow.rawChildren.getChildAt(2)&nbsp;as&nbsp;UIComponent);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text&nbsp;+=&nbsp;"&nbsp;has&nbsp;"&nbsp;+&nbsp;titleBar.numChildren;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text&nbsp;+=&nbsp;"\n"&nbsp;+&nbsp;titleBar.getChildAt(3).toString();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;popupChildText.text&nbsp;=&nbsp;text;<br />
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;popupContainer:IChildList&nbsp;=&nbsp;(application.root&nbsp;as&nbsp;IChildList);<br />
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PopUpManager.removePopUp(popupContainer.getChildAt(&nbsp;popupContainer.numChildren&nbsp;-&nbsp;1&nbsp;)&nbsp;as&nbsp;IFlexDisplayObject);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PopUpManager.removePopUp(titleWindow);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">]]&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">mx:Script</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">mx:Button&nbsp;</span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="simpleAlertShower"</span><span style="color: #ff0000;">&nbsp;click</span><span style="color: #0000ff;">="showSimpleAlert();"</span><span style="color: #ff0000;">&nbsp;label</span><span style="color: #0000ff;">="Click&nbsp;Me"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">mx:Text&nbsp;</span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="popupChildText"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">mx:Application</span><span style="color: #0000ff;">&gt;</span></div>
<br />
<br />
<img src ="http://www.blogjava.net/tj19832/aggbug/186677.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tj19832/" target="_blank">咖啡屋的鼠标</a> 2008-03-17 00:22 <a href="http://www.blogjava.net/tj19832/archive/2008/03/17/186677.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Flex功能性测试工具：Fluorida 0.0.1发布</title><link>http://www.blogjava.net/tj19832/archive/2008/03/07/184464.html</link><dc:creator>咖啡屋的鼠标</dc:creator><author>咖啡屋的鼠标</author><pubDate>Fri, 07 Mar 2008 04:08:00 GMT</pubDate><guid>http://www.blogjava.net/tj19832/archive/2008/03/07/184464.html</guid><wfw:comment>http://www.blogjava.net/tj19832/comments/184464.html</wfw:comment><comments>http://www.blogjava.net/tj19832/archive/2008/03/07/184464.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/tj19832/comments/commentRss/184464.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tj19832/services/trackbacks/184464.html</trackback:ping><description><![CDATA[<fieldset><legend>Fluorida的说明</legend>Fluorida是一种Flex/Flash功能性测试工具。它如真实用户一般操作Flash，并且允许测试者使用简单而又不失表达力的DSL编写测试用例。</fieldset><br />
【花絮】<strike><br />
</strike>在OpenParty上我们讲解了FunFX之后。熊节跟我说他刚才也做了一个自动化测试的框架。虽然我已经把敏捷和熊节这两个词关联起来很久了，但是这等速度还是让我吃了一惊（导致现在我还在怀疑是不是我听错了，<span style="color: #999999;"><span style="color: red;"><span style="color: #999999;"><span style="color: red;"><span style="color: #999999;"><span style="color: #999999;"><span style="color: red;"><span style="color: #999999;"></span></span></span><span style="color: red;"><span style="color: #999999;">已</span></span></span></span></span></span></span><span style="color: red;"><span style="color: #999999;">经证实。。。我听错了</span></span>）。那个框架当天就被熊节发到了google code上，当时他的名字是：<span class="entry-title entry-content">Fluorine，还写了一句很有趣的话：</span><span class="entry-title entry-content">Fluorine</span><span class="entry-title entry-content"> makes your teeth FLASH。可惜这个名字有人用过了，现在改名为</span>Fluorida。<br />
<br />
Fluorida的原理说白了很简单，使用dispatchEvent的方式模拟操作，若干个月之前我也这么干过，当时是对这种方式的可行性表示怀疑的。在后来在Google code上下载了代码并阅读一遍之后，我开始觉得这个做法没啥问题。而且相比FunFx，他不需要Flex程序员再去学Ruby。今天很荣幸的加入到这个项目组中。<br />
如今预览版--0.0.1版已经发布，广泛征集回馈和建议中，有任何建议可以到<a href="http://code.google.com/p/fluorida/wiki/Announcement001"><br />
http://code.google.com/p/fluorida/wiki/Announcement001</a>&nbsp; 发表评论<br />
<br />
======<br />
主要相关报道及文章：<br />
<a href="http://www.matrix.org.cn/resource/news/7cf0239a-ebe6-11dc-91da-b599c3ba16ef.html">http://www.matrix.org.cn/resource/news/7cf0239a-ebe6-11dc-91da-b599c3ba16ef.html</a><br />
<a href="http://dreamhead.blogbus.com/logs/16533990.html">http://dreamhead.blogbus.com/logs/16533990.html</a><br />
<a href="http://gigix.thoughtworkers.org/2008/3/6/announcement-fluorida-0-0-1">http://gigix.thoughtworkers.org/2008/3/6/announcement-fluorida-0-0-1</a><br />
<br />
项目地址：<br />
<a href="http://code.google.com/p/fluorida/">http://code.google.com/p/fluorida/</a><br />
<br />
<img src ="http://www.blogjava.net/tj19832/aggbug/184464.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tj19832/" target="_blank">咖啡屋的鼠标</a> 2008-03-07 12:08 <a href="http://www.blogjava.net/tj19832/archive/2008/03/07/184464.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>想在Flex平台上学习设计模式的人注意啦</title><link>http://www.blogjava.net/tj19832/archive/2008/03/05/183863.html</link><dc:creator>咖啡屋的鼠标</dc:creator><author>咖啡屋的鼠标</author><pubDate>Wed, 05 Mar 2008 02:21:00 GMT</pubDate><guid>http://www.blogjava.net/tj19832/archive/2008/03/05/183863.html</guid><wfw:comment>http://www.blogjava.net/tj19832/comments/183863.html</wfw:comment><comments>http://www.blogjava.net/tj19832/archive/2008/03/05/183863.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/tj19832/comments/commentRss/183863.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tj19832/services/trackbacks/183863.html</trackback:ping><description><![CDATA[像我这样从Java平台进入Flex平台的人经常会为ActionScript不容易实现某些设计模式（比如单例）而烦恼，跟我一样烦恼的人有福了，这里有一本很棒的书：<br />
<a href="/Files/tj19832/flex/Adobe.Press.Advanced.ActionScript.3.with.Design.Patterns.Nov.2006.rar">http://www.blogjava.net/Files/tj19832/flex/Adobe.Press.Advanced.ActionScript.3.with.Design.Patterns.Nov.2006.rar</a><br />
<br />
这本书一定要读，一定要读，一定要读，不然开发的时候会犯很多错误，走很多弯路，产生很多错误的认识。后果很严重的：P<br />
<br />
<br />
<img src ="http://www.blogjava.net/tj19832/aggbug/183863.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tj19832/" target="_blank">咖啡屋的鼠标</a> 2008-03-05 10:21 <a href="http://www.blogjava.net/tj19832/archive/2008/03/05/183863.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如果你和我一样装不上Flex Builder 3</title><link>http://www.blogjava.net/tj19832/archive/2008/02/28/182625.html</link><dc:creator>咖啡屋的鼠标</dc:creator><author>咖啡屋的鼠标</author><pubDate>Thu, 28 Feb 2008 03:11:00 GMT</pubDate><guid>http://www.blogjava.net/tj19832/archive/2008/02/28/182625.html</guid><wfw:comment>http://www.blogjava.net/tj19832/comments/182625.html</wfw:comment><comments>http://www.blogjava.net/tj19832/archive/2008/02/28/182625.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tj19832/comments/commentRss/182625.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tj19832/services/trackbacks/182625.html</trackback:ping><description><![CDATA[我的操作系统是Vista Home Basic版，Adobe网站上有两个地方下载Flex Builder。我从http://www.adobe.com/go/flex_trial下载的怎么也装不上。而从https://www.adobe.com/cfusion/tdrc/index.cfm?product=flex下载的就能装（这个地址需要你有Adobe的id，注册一个就好）。虽然解压出来也是前一个的文件，但就是能装，实在是有点晕。不知道是不是vista都这德行，反正跟我一样装不上Flex Builder3的话，去后一个地址下载就可。<br />
<img src ="http://www.blogjava.net/tj19832/aggbug/182625.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tj19832/" target="_blank">咖啡屋的鼠标</a> 2008-02-28 11:11 <a href="http://www.blogjava.net/tj19832/archive/2008/02/28/182625.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>正欲燎原的Flex</title><link>http://www.blogjava.net/tj19832/archive/2008/02/28/182579.html</link><dc:creator>咖啡屋的鼠标</dc:creator><author>咖啡屋的鼠标</author><pubDate>Wed, 27 Feb 2008 16:52:00 GMT</pubDate><guid>http://www.blogjava.net/tj19832/archive/2008/02/28/182579.html</guid><wfw:comment>http://www.blogjava.net/tj19832/comments/182579.html</wfw:comment><comments>http://www.blogjava.net/tj19832/archive/2008/02/28/182579.html#Feedback</comments><slash:comments>11</slash:comments><wfw:commentRss>http://www.blogjava.net/tj19832/comments/commentRss/182579.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tj19832/services/trackbacks/182579.html</trackback:ping><description><![CDATA[最近，Adobe发布了Flex 3和AIR 1.0。宣布一个新时代的正式来临。Flex的时代。<br />
回顾多年以前，当它仅仅是Flash的时候，那时的它也可以运行在网页中和桌面上，大家觉得它很漂亮，仅此而已，那时的它只是个非常可爱的小玩具。不要说巨人微软没有注意到它身上隐藏的潜力，就连他现在的主人Adobe也对它不感兴趣。也正是这样，他在每一个平台上都很好的生存了下来。<br />
在这个世界上，有另外一个技术，叫做Java。它以跨平台为理念，努力打造一个统一的软件世界。在后台，它取得了无与伦比的成功，可是在前台，它总是不那么顺利。我，就生活在这样的世界里。<br />
日子一天天过去，Flex迎来了3.0。FlashPlayer9也占据了世界上94%的PC（如果算上以前的版本，这个占有率逼近100%）。而相比只下，JRE之占据了84.6%,在苹果和其他操作系统的冲击下，windows也降到了90%以下。毫不客气的说，FlashPlayer已经是世界上覆盖率最大的运行环境。昔日的星星之火开始呈现燎原之势。<br />
今年，毫无疑问会有很多的开发人员转向或者开始接触Flex，中国的Flex资源还比较贫乏，不过已经有一群人在努力了。虽然已经有了AnyFlex，RIAchina之类的论坛，但是相比较传统的论坛，下面的几个更有特色：<br />
以<a href="http://www.k-zone.cn/zblog/">Kenshin</a>为首的人做的<a href="http://rxna.cn/">RXNA</a>是一个非常棒的Flex相关RSS信息整合站，类似国外的mxna<br />
而<a href="http://blog.eshangrao.com/index.php">闲云野鹤</a>则建造了一个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 />
还有促进线下交流的<a href="http://www.riameeting.cn">RIAmeeting</a><br />
有声有色的活动和网站正在一点点多起来，今年将是Flex星火燎原的一年。我对此充满信心。<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/tj19832/aggbug/182579.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tj19832/" target="_blank">咖啡屋的鼠标</a> 2008-02-28 00:52 <a href="http://www.blogjava.net/tj19832/archive/2008/02/28/182579.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>好吧，也来跟风</title><link>http://www.blogjava.net/tj19832/archive/2008/02/25/182079.html</link><dc:creator>咖啡屋的鼠标</dc:creator><author>咖啡屋的鼠标</author><pubDate>Mon, 25 Feb 2008 12:25:00 GMT</pubDate><guid>http://www.blogjava.net/tj19832/archive/2008/02/25/182079.html</guid><wfw:comment>http://www.blogjava.net/tj19832/comments/182079.html</wfw:comment><comments>http://www.blogjava.net/tj19832/archive/2008/02/25/182079.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tj19832/comments/commentRss/182079.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tj19832/services/trackbacks/182079.html</trackback:ping><description><![CDATA[所有关注Flex的博客上都在写这个，那我也跟风好了。<span style="font-size: 24pt;"><strong><br />
Adobe发布Flex 3和AIR 1.0的正式版。</strong></span><strong></strong><br />
在这个日子里我在干啥捏？配CruiseControl，尝试将持续集成引入我们部门，顺便，考虑CI in Flex的解决方案。<br />
<br />
<img src ="http://www.blogjava.net/tj19832/aggbug/182079.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tj19832/" target="_blank">咖啡屋的鼠标</a> 2008-02-25 20:25 <a href="http://www.blogjava.net/tj19832/archive/2008/02/25/182079.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在Flash中使用SVG</title><link>http://www.blogjava.net/tj19832/archive/2008/02/14/179891.html</link><dc:creator>咖啡屋的鼠标</dc:creator><author>咖啡屋的鼠标</author><pubDate>Thu, 14 Feb 2008 03:17:00 GMT</pubDate><guid>http://www.blogjava.net/tj19832/archive/2008/02/14/179891.html</guid><wfw:comment>http://www.blogjava.net/tj19832/comments/179891.html</wfw:comment><comments>http://www.blogjava.net/tj19832/archive/2008/02/14/179891.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tj19832/comments/commentRss/179891.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tj19832/services/trackbacks/179891.html</trackback:ping><description><![CDATA[目前Flash是不支持运行时加载SVG的。必须使用Embed的方式。<br />
已经有人向Adobe提出了请求，不知道什么时候才能实现了：<a href="http://bugs.adobe.com/jira/browse/SDK-11619">http://bugs.adobe.com/jira/browse/SDK-11619</a><br />
目前来说，使用SVG就会增Flash的体积，用来做些Logo之类的小东西还可以，做别的还是免了吧。<br />
<img src ="http://www.blogjava.net/tj19832/aggbug/179891.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tj19832/" target="_blank">咖啡屋的鼠标</a> 2008-02-14 11:17 <a href="http://www.blogjava.net/tj19832/archive/2008/02/14/179891.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>BlazeDS中的RPC实用日记</title><link>http://www.blogjava.net/tj19832/archive/2008/02/13/179727.html</link><dc:creator>咖啡屋的鼠标</dc:creator><author>咖啡屋的鼠标</author><pubDate>Tue, 12 Feb 2008 16:07:00 GMT</pubDate><guid>http://www.blogjava.net/tj19832/archive/2008/02/13/179727.html</guid><wfw:comment>http://www.blogjava.net/tj19832/comments/179727.html</wfw:comment><comments>http://www.blogjava.net/tj19832/archive/2008/02/13/179727.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/tj19832/comments/commentRss/179727.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tj19832/services/trackbacks/179727.html</trackback:ping><description><![CDATA[用了twitter之后这些小小的心得都有点不想往博客上写了。<br />
这两天用BlazeDS做个小软件，在用BlazeDS的时候发现，服务端的异常会被直接抛到客户端，去了我心里一个疙瘩。虽然我还不知道他给抛哪去了，是去了回调函数，还是在调用代码那里。不过他既然能抛回来，我就能处理咯，这都是小问题。<br />
另外服务端返回的Java中的List，在BlazeDS中，都是给映射成了ArrayCollection。以后可以放心的处理了。<br />
BlazeDS的文档还只有在线的，看着十分不方便，尤其是公司那个网速，整个就是拨号时代的速度啊。<br />
BlazeDS文档地址：<a href="http://livedocs.adobe.com/labs/blazeds/html/index.html">http://livedocs.adobe.com/labs/blazeds/html/index.html</a><br />
<br />
<br />
<img src ="http://www.blogjava.net/tj19832/aggbug/179727.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tj19832/" target="_blank">咖啡屋的鼠标</a> 2008-02-13 00:07 <a href="http://www.blogjava.net/tj19832/archive/2008/02/13/179727.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>搞到Flex Active Desktop部分源码</title><link>http://www.blogjava.net/tj19832/archive/2008/02/10/179535.html</link><dc:creator>咖啡屋的鼠标</dc:creator><author>咖啡屋的鼠标</author><pubDate>Sat, 09 Feb 2008 16:51:00 GMT</pubDate><guid>http://www.blogjava.net/tj19832/archive/2008/02/10/179535.html</guid><wfw:comment>http://www.blogjava.net/tj19832/comments/179535.html</wfw:comment><comments>http://www.blogjava.net/tj19832/archive/2008/02/10/179535.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tj19832/comments/commentRss/179535.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tj19832/services/trackbacks/179535.html</trackback:ping><description><![CDATA[最终确定，这个东西是用flexmdi做的，而不是用的ventanas。不管用哪个，我都郁闷了一天，想不明白他是怎么做的旋转，结果看了代码发现，他把Flexmdi给改了。把人家的MDIWindow改成继承ViewStack的了，恍然大悟。。。。。<br />
<img src ="http://www.blogjava.net/tj19832/aggbug/179535.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tj19832/" target="_blank">咖啡屋的鼠标</a> 2008-02-10 00:51 <a href="http://www.blogjava.net/tj19832/archive/2008/02/10/179535.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>FunFx Getting Started</title><link>http://www.blogjava.net/tj19832/archive/2008/02/07/179444.html</link><dc:creator>咖啡屋的鼠标</dc:creator><author>咖啡屋的鼠标</author><pubDate>Thu, 07 Feb 2008 14:52:00 GMT</pubDate><guid>http://www.blogjava.net/tj19832/archive/2008/02/07/179444.html</guid><wfw:comment>http://www.blogjava.net/tj19832/comments/179444.html</wfw:comment><comments>http://www.blogjava.net/tj19832/archive/2008/02/07/179444.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/tj19832/comments/commentRss/179444.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tj19832/services/trackbacks/179444.html</trackback:ping><description><![CDATA[【前言】早在半年前的项目之处就想采用TDD的开发方式，最起码也要做到较完备的自动化测试。当时调研了很久找到一个叫FunFx的开源框架。可惜这个框架的试用之路并不平坦。最初找到的只有文档，照着文档做，失败了。看到文档上还是Flex2的，换成Flex2，编译都通不过,原来Flex2需要lcds的license只好回到flex3。被逼无奈去看代码，我的Ruby水平是二把刀，尽管改代码了，但还是通不过。怀疑是不是不支持Flex3，而且项目进度又容不得我们慢慢研究，只好自己写了一个功能有残次的测试框架，凑付着用，后来因为框架的扩展速度慢慢跟不上开发的速度，最终连写自动化测试用例的计划也放弃了。随着FunFx出了0.0.2，又对这个测试框架产生了一点希望，再次搭建的结果还是一度失败，经过不懈努力，总算在大年三十的下午运行了第一个Hello World！。<br />
【正题：搭建TDD测试环境】（下面我说的过程是我个人运行的过程，应该是运行FunFx的充分条件，但不保证都是必要条件，如果有人发现哪个步骤是不必要的。请在回复中指出。）<br />
FunFX是一个基于Ruby的自动化测试框架，所以，我们必须要装Ruby，我安装的Ruby版本是Ruby-186-26。我的Ruby IDE是eclipse上的RDT插件。我的操作系统是笔记本自带的Vista Home Basic，因此我的IE是ie7。我的Flex IDE是Flex Builder 3 beta3。<br />
运行环境就这些，那么开始讲解搭建过程吧。我们从下载开始说起，首先，我们要去<a href="https://rubyforge.org/projects/funfx/">RubyForge</a>下载FunFx 0.0.2，那是一个zip文件，记得要把Source包也下载下来，在后面我会说到它的用处。<br />
下载完毕之后，将其解压，我们可以看到三个文件：<br />
<ul>
    <li>AutomationGenericEnv.xml</li>
    <li>FunFX-0.0.2.gem</li>
    <li>FunFXAdapter.swc</li>
</ul>
接下来，我们在FlexBuilder3中新建一个工程：LearnFunFx，在libs文件夹里加入下面三个swc文件：<br />
<ul>
    <li>automation_agent.swc</li>
    <li>automation.swc</li>
    <li>FunFXAdapter.swc</li>
</ul>
这里面的前两个swc文件来自flex的sdk里面。后面的一个就是FunFx里面的swc，但是这个swc有可能是无法使用的，因为它是为flex 2编译的，这时就需要我们前面下载的源代码文件了。源代码文件解压开之后可以找到FunFXAdapter文件夹。里面就是FunFXAdapter.swc的源代码（包括测试代码）。将其编译成swc（如果你不会编译成swc，请查阅相关文章或自己琢磨，给你个提示，可以用library project）。将我们自己编译出来的swc文件拷到libs里。这样我们就收集全了所有的类包。<br />
<br />
接着将AutomationGenericEnv.xml拷贝到src文件夹下，然后在LearnFunFx.mxml中加入如下代码：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">&lt;?</span><span style="color: #ff00ff;">xml&nbsp;version="1.0"&nbsp;encoding="utf-8"</span><span style="color: #0000ff;">?&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">mx:Application&nbsp;</span><span style="color: #ff0000;">xmlns:mx</span><span style="color: #0000ff;">="http://www.adobe.com/2006/mxml"</span><span style="color: #ff0000;">&nbsp;layout</span><span style="color: #0000ff;">="absolute"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">mx:Script</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;![CDATA[</span><span style="color: #808080;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;mx.controls.Alert;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">]]&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">mx:Script</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">mx:Button&nbsp;</span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="test"</span><span style="color: #ff0000;">&nbsp;x</span><span style="color: #0000ff;">="255"</span><span style="color: #ff0000;">&nbsp;y</span><span style="color: #0000ff;">="146"</span><span style="color: #ff0000;">&nbsp;label</span><span style="color: #0000ff;">="Button"</span><span style="color: #ff0000;">&nbsp;click</span><span style="color: #0000ff;">="Alert.show('Hello&nbsp;World!');"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">mx:Application</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp; <br />
</span></div>
代码实现的功能很简单，单击按钮，弹出Hello World!的对话框。<br />
代码准备完了，接下来是编译了。下面我们在我们的工程：LearnFunFx上点击右键：选择Properties，再选择Flex Compiler，在Additional compiler arguments文本框中输入：-include-libraries "XXXX\LearnFunFx\libs\automation.swc" "XXXX\LearnFunFx\libs\automation_agent.swc"&nbsp; "XXX\LearnFunFx\libs\FunFXAdapter.swc"<br />
XXX表示工程根文件夹，自己补齐。<br />
接下来，一个囫囵的swf文件就被编译出来了。这里还有一个问题,html文件里面的Object标签一定要有一个name属性，其值要跟id一样，这就需要我们改html-template文件夹下的index.template.html了。我的做法是把body标签里的js代码删掉，只留下html标签版本的，然后在Object标签里面加上一个属性：name="${application}"。再次编译一个，将 bin文件夹下的所有文件拷到一个web应用中。<br />
<br />
flex端的处理完毕了，接下来是Ruby，还记得那三个文件吗？<br />
在三个文件所在的文件夹中地址栏里运行cmd（这是vista的小技巧，其他的windows可以通过传统的方式进入cmd窗口,并进入该文件夹），在命令行上输入：
gem install FunFX-0.0.2.gem等待一小会儿，屏幕上提示：Successfully installed FunFX,
version 0.0.2，表示已经安装成功。<br />
然后进入Eclipse 新建一个ruby项目LearnFunFx，也将AutomationGenericEnv.xml拷到源文件同级目录下，新建LearnFunFxTest.rb，输入代码：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">require&nbsp;</span><span style="color: #800000;">'</span><span style="color: #800000;">test/unit</span><span style="color: #800000;">'</span><span style="color: #000000;"><br />
require<span style="color: #0000ff;">&nbsp;<span style="color: #0000ff;"><span style="color: #800000;"><span style="color: #0000ff;"><span style="color: #800000;">'</span><span style="color: #800000;">funfx</span><span style="color: #800000;">'</span></span></span></span></span><span style="color: #0000ff;"><span style="color: #800000;"><span style="color: #0000ff;"></span></span></span></span><span style="color: #000000;"><br />
<br />
</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;LearnFunFxTest&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;Test::Unit::TestCase<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;setup<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff3300;">@ie</span>&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Funfx.instance<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff3300;">@ie</span>.start(true)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff3300;">@ie</span>.speed&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;"><span style="color: #ff3300;">@ie</span>.goto(</span><span style="color: #800000;">"</span><span style="color: #800000;">http://localhost/.../LearnFunFx.html</span><span style="color: #800000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">LearnFunFx</span><span style="color: #800000;">"</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">end</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;test_control<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff3300;">@ie</span>.button(</span><span style="color: #800000;">"</span><span style="color: #800000;">test</span><span style="color: #800000;">"</span><span style="color: #000000;">).click<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">end</span><br />
<span style="color: #0000ff;">end</span></span></div>
&#8220;...&#8221;是web应用的名字，自己补齐。代码非常简单，功能是打开网页，找到名为LearnFx的swf，点击id为test的按钮。在运行之前，我们还要做一件事，不然的话，我们之前的所有努力都白费了。打开IE，按下alt，选择&#8220;工具&#8221;-&gt; &#8220;Internet选项&#8221;，点击&#8220;安全&#8221;tab页，将&#8220;本地Intranet&#8221;安全级别设为低，将http://localhost加入可信站点，并将可信站点的安全级别设为低。（这里是我不确定是否多做了什么的地方之一）。做了这些之后，ruby调用js就不会被浏览器阻拦了。（刚才试了一下，运行完测试用例之后再改回去也不会被阻拦了，搞得我很郁闷，但是在我修改这里之前，确实是无法运行的。）<br />
然后我们运行该测试用例，我们就会看到一个浏览器窗口被弹出，swf中的按钮被按下，一个Hello World!的对话框弹出。一切成功：）<br />
（完）<br />
<br />
<br />
<img src ="http://www.blogjava.net/tj19832/aggbug/179444.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tj19832/" target="_blank">咖啡屋的鼠标</a> 2008-02-07 22:52 <a href="http://www.blogjava.net/tj19832/archive/2008/02/07/179444.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>FunFX终于运行通过</title><link>http://www.blogjava.net/tj19832/archive/2008/02/07/179419.html</link><dc:creator>咖啡屋的鼠标</dc:creator><author>咖啡屋的鼠标</author><pubDate>Wed, 06 Feb 2008 17:12:00 GMT</pubDate><guid>http://www.blogjava.net/tj19832/archive/2008/02/07/179419.html</guid><wfw:comment>http://www.blogjava.net/tj19832/comments/179419.html</wfw:comment><comments>http://www.blogjava.net/tj19832/archive/2008/02/07/179419.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tj19832/comments/commentRss/179419.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tj19832/services/trackbacks/179419.html</trackback:ping><description><![CDATA[因为二把刀的Ruby水平，导致我反反复复研究FunFX，最后问题居然出在IE的安全性上。不管怎么说，终于在今天测试通过了。新年里，这是一个非常鼓舞我的事件，终于可以给自己一个交代了，Flex对TDD是友好的。<br />
最后，新年新气象，跟所有看到这篇blog的朋友们拜个年。<br />
<br />
<img src ="http://www.blogjava.net/tj19832/aggbug/179419.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tj19832/" target="_blank">咖啡屋的鼠标</a> 2008-02-07 01:12 <a href="http://www.blogjava.net/tj19832/archive/2008/02/07/179419.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Flex Active Desktop可能用到了哪些控件</title><link>http://www.blogjava.net/tj19832/archive/2008/01/30/178592.html</link><dc:creator>咖啡屋的鼠标</dc:creator><author>咖啡屋的鼠标</author><pubDate>Wed, 30 Jan 2008 15:01:00 GMT</pubDate><guid>http://www.blogjava.net/tj19832/archive/2008/01/30/178592.html</guid><wfw:comment>http://www.blogjava.net/tj19832/comments/178592.html</wfw:comment><comments>http://www.blogjava.net/tj19832/archive/2008/01/30/178592.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/tj19832/comments/commentRss/178592.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tj19832/services/trackbacks/178592.html</trackback:ping><description><![CDATA[前几天在《Flex的逆袭》中推荐了一个嚣张的Flash，他的名字叫做&#8220;<span>Flex Active Desktop</span>&#8221;，没看过的人可以看看这两个视频了解一下：<br />
<object width="425" height="355">
<param name="movie" value="http://www.youtube.com/v/wOPOXSoArWQ&rel=1"></param>
<param name="wmode" value="transparent"></param>
<embed src="http://www.youtube.com/v/wOPOXSoArWQ&rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object>
    <br />
    <object width="425" height="355">
    <param name="movie" value="http://www.youtube.com/v/hZ9VHzTMwr8&rel=1"></param>
    <param name="wmode" value="transparent"></param>
    <embed src="http://www.youtube.com/v/hZ9VHzTMwr8&rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object>
        <br />
        这里面有几个效果和控件是让我非常感兴趣。比如说里面的旋转效果，不管是桌面的旋转还是窗口的旋转；比如那个可以看网页的浏览器，比如那些表现力十分丰富的按钮。抱着对这些的强烈兴趣，搜寻了大小网站，一个个看开源项目，一篇篇读博客文章，总算被我找到几个。<br />
        <br />
        首先登场的是强大的旋转效果：<br />
        <a href="http://www.alex-uhlmann.de/flash/adobe/blog/distortionEffects/effectCube/">
        http://www.alex-uhlmann.de/flash/adobe/blog/distortionEffects/effectCube/</a><br />
        在这个效果里面，我们的所有的旋转效果他都支持了，不管是立方体的旋转，还是窗口从最小化恢复的变形，还是窗口的180度旋转全都有了。代码在这里下载：<a href="http://weblogs.macromedia.com/auhlmann/archives/DistortionEffects.zip">http://weblogs.macromedia.com/auhlmann/archives/DistortionEffects.zip</a><br />
        <br />
        接下来登场的是看似非常不科学的Flex中的浏览器：<br />
        <a href="http://www.themidnightcoders.com/blog/projects/flexhtml/flexhtml.html">http://www.themidnightcoders.com/blog/projects/flexhtml/flexhtml.html</a><br />
        用这个控件我们可以在Flash里面浏览网页，其实是作假的，并不是真的写了一个html+CSS+JS解析器。当然也有类似这样BT的强者：<a href="http://motionandcolor.com/wrapper/">http://motionandcolor.com/wrapper/</a><br />
        这是一个用AS写的 HTML/CSS 渲染引擎，虽然没有JS，依然十分彪悍。<br />
        <br />
        接下来，该是我们的按钮了。Flex中的按钮表现力相对而言比较差。这个CanvasButton控件就能弥补这点不足，我们可以把它当成Canvas用，不管Canvas里放什么，最后都会表现为一个Button，这样我们可以轻松的做出富有表现力的按钮：<a href="http://dougmccune.com/blog/2007/06/01/new-component-canvasbutton-added-to-flexlib/">http://dougmccune.com/blog/2007/06/01/new-component-canvasbutton-added-to-flexlib/</a><br />
        他是上次我推荐的flexlib的控件之一，flexlib是非常强大的控件集。<br />
        <br />
        Flex Active Desktop中下方的工具条我没找到，看着也不难，用TileList应该可以做到。不过在找的过程中我发现了这个：<br />
        <a href="http://dev.getoutsmart.com/labs/dock/">http://dev.getoutsmart.com/labs/dock/</a><br />
        仿苹果的工具条，这比那个更嚣张，咔咔。在这里下载代码：<a href="http://dev.getoutsmart.com/labs/dock/dockdemo.zip">http://dev.getoutsmart.com/labs/dock/dockdemo.zip</a><br />
        <br />
        当然里面的窗口看着也不错，窗口的效果可以见这里：<br />
        <a href="http://www.returnundefined.com/flexmdi/explorer/">http://www.returnundefined.com/flexmdi/explorer/</a><br />
        <br />
        第二个视频中转着切换表示当前选中图标的效果也许是用了这个：<a href="http://blogs.digitalprimates.net/codeSlinger/samples/carousel/CarouselTest.html"><br />
        http://blogs.digitalprimates.net/codeSlinger/samples/carousel/CarouselTest.html</a><br />
        <br />
        窗口右侧伸出扩展子窗口的效果，应该是用的这里的，也保不齐窗口就是用的这个，而不是上面那个：<br />
        <a href="http://window.diaztorres.com/bin-release/test_window.html">http://window.diaztorres.com/bin-release/test_window.html</a><br />
        <br />
        有了这些控件，Flex Active Desktop看起来也不是那么难做出来的Flex了是不？这就是我爱开源的原因之一。<br />
<img src ="http://www.blogjava.net/tj19832/aggbug/178592.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tj19832/" target="_blank">咖啡屋的鼠标</a> 2008-01-30 23:01 <a href="http://www.blogjava.net/tj19832/archive/2008/01/30/178592.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>FunFx研究失利</title><link>http://www.blogjava.net/tj19832/archive/2008/01/30/178430.html</link><dc:creator>咖啡屋的鼠标</dc:creator><author>咖啡屋的鼠标</author><pubDate>Tue, 29 Jan 2008 16:02:00 GMT</pubDate><guid>http://www.blogjava.net/tj19832/archive/2008/01/30/178430.html</guid><wfw:comment>http://www.blogjava.net/tj19832/comments/178430.html</wfw:comment><comments>http://www.blogjava.net/tj19832/archive/2008/01/30/178430.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tj19832/comments/commentRss/178430.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tj19832/services/trackbacks/178430.html</trackback:ping><description><![CDATA[FunFX是flex平台下的一个开源自动化测试工具，可以对Flex进行TDD开发，目前，我已经进行了三次尝试,可FunFX总也搭建不起来，心情极度恶劣。<br />
<img src ="http://www.blogjava.net/tj19832/aggbug/178430.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tj19832/" target="_blank">咖啡屋的鼠标</a> 2008-01-30 00:02 <a href="http://www.blogjava.net/tj19832/archive/2008/01/30/178430.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Data Service：Flex在J2EE企业级开发中的王道</title><link>http://www.blogjava.net/tj19832/archive/2008/01/27/178002.html</link><dc:creator>咖啡屋的鼠标</dc:creator><author>咖啡屋的鼠标</author><pubDate>Sun, 27 Jan 2008 03:56:00 GMT</pubDate><guid>http://www.blogjava.net/tj19832/archive/2008/01/27/178002.html</guid><wfw:comment>http://www.blogjava.net/tj19832/comments/178002.html</wfw:comment><comments>http://www.blogjava.net/tj19832/archive/2008/01/27/178002.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/tj19832/comments/commentRss/178002.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tj19832/services/trackbacks/178002.html</trackback:ping><description><![CDATA[过去的半年，因为对于Flex的认识较浅，全部采用的HttpService的方式构建的我们程序的通信，这里面java对象与as对象的映射与解析是一份工作量不小的工作，不是没考虑用DataSerive的RPC，因为考虑到收费就放弃了，前不久从InfoQ上一篇新闻得知，有开源的DataService：GraniteDS，而Adobe自己也在去年12月14日开源了一个:BlazeDS。<br />
这下清除了我们成本和许可的障碍。前天下载了BlazeDS，稍微研究了一下，部署了一个应用。<br />
结果非常的成功，一切都变得那么简单了，我们可以轻松的调用后台的Java方法。就好像调用flex本地的方法一样。而且不用写Java类和as类的映射(还是要写两行代码的，在映射的类上写这些：[Bindable] [RemoteClass(alias="Java全类名，自己替换")])，我昨天试了，非常好用。传参和返回值都是跟直接调flex的函数一样（除了是异步的。这里我们看得出Flex对Java是非常友好的），还没试异常。而且配置也是非常简单的，在WEB-INF/flex/remoting-config.xml 下配置一个类似这样的标签就可以了：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">destination&nbsp;</span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="product"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">properties</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">source</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">flex.samples.product.ProductService</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">source</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">properties</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">destination</span><span style="color: #0000ff;">&gt;</span></div>
调用也非常简单（以mxml中的调用为例）：&nbsp;&nbsp;&nbsp; &lt;mx:RemoteObject id="srv" destination="product"/&gt; destination属性的值就是配置文件里&lt;destination&gt;标签的id属性的值，之后我们就能像使用as对象一样使用他了。<br />
前后台的对象保持一致的办法也只是有一个什么样的Java对象就写一个什么样的as对象。<br />
<br />
<a href="http://labs.adobe.com/technologies/blazeds/"></a><br />
部署也非常简单，将BlazeDS下载到之后，解压完毕我们可以看到三个war包，三个文件夹，和一个license,其他的不看，三个文件夹分别是：<br />
<ul>
    <li>docs</li>
    <li>resources</li>
    <li>tomcat</li>
</ul>
顾名思义，第一个是文档（现在还不全，想看全的还得去网站上看在线的）；第二个是一些可能会用到的资源，比如Jar包什么的；第三个是保存有例子的tomcat，webapps里面有三个web应用，分别对应那三个war包，但其中最有用的就是blazeds-samples这个了从里面我们可以看到所有丰富的例子，而且单击右键选择View Source还能看到代码，而blazeds就是我们部署一个基于BlazeDS的web应用的空文件夹，所有该web应用需要的Jar包和配置文件都全了，而且都在他们该在的文件夹里。不过你要真的跑起来，在你的tomcat里还要部署些server级的东西，那个就在我们的resources/security/tomcat里，参照该文件夹下的readme.txt部署。<br />
<br />
另外，即便是对HttpService和WebService的应用方面他都有一个很好的框架，他还有一个message框架，目前我还不清楚是干什么用的，猜测也许像JMS。<br />
<br />
在对J2EE的支持方面，GraniteDS号称已经支持EJB3.0,Spring,Guice,Seam，BlazeDS我还不知道，不过GraniteDS的作者对BlazeDS是持一个开放的态度的，且两者的开源协议是同一个，可以互相拷贝代码，所以我相信将来两者都会更强大。<br />
<br />
简单的配置，清晰的结构，强大的功能。在试用之后，我坚信Flex中J2EE开发的王道一定是各种Data Service。<br />
=========================<br />
BlazeDS的网址：<br />
<a href="http://labs.adobe.com/technologies/blazeds/">http://labs.adobe.com/technologies/blazeds/</a><br />
<br />
题外话，推荐一个Flex for Java的网址，希望对Java程序员有帮助：<br />
<a href="http://flex.org/java/">http://flex.org/java/</a><br />
<img src ="http://www.blogjava.net/tj19832/aggbug/178002.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tj19832/" target="_blank">咖啡屋的鼠标</a> 2008-01-27 11:56 <a href="http://www.blogjava.net/tj19832/archive/2008/01/27/178002.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ajax还是Flex？（二）Flex的逆袭</title><link>http://www.blogjava.net/tj19832/archive/2008/01/24/177594.html</link><dc:creator>咖啡屋的鼠标</dc:creator><author>咖啡屋的鼠标</author><pubDate>Thu, 24 Jan 2008 14:41:00 GMT</pubDate><guid>http://www.blogjava.net/tj19832/archive/2008/01/24/177594.html</guid><wfw:comment>http://www.blogjava.net/tj19832/comments/177594.html</wfw:comment><comments>http://www.blogjava.net/tj19832/archive/2008/01/24/177594.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.blogjava.net/tj19832/comments/commentRss/177594.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tj19832/services/trackbacks/177594.html</trackback:ping><description><![CDATA[好了，作为一个Flex的爱好者，说这么多Flex的不好也是挺不爽的一件事，不过不好反正坏的都说的差不多了。今天可以放心的说说好的。<br />
我从不觉得Flex的出现Ajax就要退出历史舞台了，web上在很长的时间里还是JS+HTML+CSS的天下，而且随着技术的发展，保不齐还会发生什么让我们想不到的进步。所以幻想拿flex替代Ajax的人们可以歇歇了。如果说web的王位还要在很长时间内保持现状的话，那么哪里是Flex的生存之道呢？这个问题不好回答，但是如果我们从另一个切入点来考虑这个问题，来看看Flex的优势，这个问题就简单化了。<br />
我最常问得一个问题：Flex和Ajax拼效果，谁赢？毫无疑问是Flex，但是Flex毕竟是后起之秀，所以我的观点很简单，如果你打算做Web Style的UI，放弃Flex吧，选他还不如不选，不过。。。。如果你想做个非Web Style的UI，挑战UI的极限，选Flex吧，你不会后悔的。Flex可以把创意发挥到极致。<br />
尽管Flex有这样那样的问题，但是她的优点依然令我着迷。让我愿意进行各种努力去扬长避短。<br />
下面这个就是adobe的flash on，超常规的视频网站，相关视频的摆放方式给你耳目一新的感受，<br />
<a href="http://www.adobe.com/flashon/">http://www.adobe.com/flashon/</a><br />
如果你的网速不够好，体验不了FlashON的流畅效果，没关系，你可以看看下面的这两个视频，你也可以明了RIA能做到怎样的高度：<br />
<br />
<object width="425" height="355">
<param name="movie" value="http://www.youtube.com/v/wOPOXSoArWQ&rel=1"></param>
<param name="wmode" value="transparent"></param>
<embed src="http://www.youtube.com/v/wOPOXSoArWQ&rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object><br />
    <br />
    <object width="425" height="355">
    <param name="movie" value="http://www.youtube.com/v/hZ9VHzTMwr8&rel=1"></param>
    <param name="wmode" value="transparent"></param>
    <embed src="http://www.youtube.com/v/hZ9VHzTMwr8&rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object><br />
        会穿墙的伙计们，可以自己去网站上感受一下这个RIA：<br />
        <a href="http://www.thereplicants.net/flex/test/Dashboard.html">http://www.thereplicants.net/flex/test/Dashboard.html</a><br />
        空间有限，我就不展示AIR iPhone之类的的了（而且AIR也是有点跑题了）感兴趣的可以去下下这个：<a href="http://www.merhl.com/?p=29">http://www.merhl.com/?p=29 </a>那个网站右侧的twitter工具很有趣<br />
        <br />
        除去这些之外，Flex还有什么优势吗？有，视频和音频播放，以及跟Adobe其他产品的整合能力。flash on的视频已然支持HD画质，可以给用户带来更大的视觉享受。而与Adobe的产品整合能力么，看这个：<br />
        <object width="425" height="373">
        <param name="movie" value="http://www.youtube.com/v/48Uy3EQBxpQ&rel=1&border=1"></param>
        <param name="wmode" value="transparent"></param>
        <embed src="http://www.youtube.com/v/48Uy3EQBxpQ&rel=1&border=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="373"></embed></object>
            <br />
            酷吧（我还曾看到另外一个模拟photoshop的flex，也很嚣张，可惜地址找不到了。），该应用已经投入使用：<a href="http://www.youtube.com/ytremixer_about">http://www.youtube.com/ytremixer_about</a><br />
            娱乐方面，Flex也可以提供给我们很多很多，比如：<br />
            <a href="http://blog.alternativagame.com/ru/files/2007/10/3denginedemo_en.swf">http://blog.alternativagame.com/ru/files/2007/10/3denginedemo_en.swf</a><br />
            <a href="http://www.smallworlds.com/beta/">http://www.smallworlds.com/beta/</a><br />
            这才是Flex，她模糊了Application与Web的界限。Ajax也很好，她提升了页面的用户体验。只不过两者追求的高度是不一样的。Ajax带来的是一次改革，而Flex带来的则是一场革命。Flex生来就是为了让人们享受更好的效果的，早在他还是那个小小的flash时代就是了。而现在，震撼才刚刚开始。<br />
            （The End）<br />
<img src ="http://www.blogjava.net/tj19832/aggbug/177594.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tj19832/" target="_blank">咖啡屋的鼠标</a> 2008-01-24 22:41 <a href="http://www.blogjava.net/tj19832/archive/2008/01/24/177594.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ajax还是Flex？（一）前辈Ajax</title><link>http://www.blogjava.net/tj19832/archive/2008/01/24/177392.html</link><dc:creator>咖啡屋的鼠标</dc:creator><author>咖啡屋的鼠标</author><pubDate>Wed, 23 Jan 2008 17:28:00 GMT</pubDate><guid>http://www.blogjava.net/tj19832/archive/2008/01/24/177392.html</guid><wfw:comment>http://www.blogjava.net/tj19832/comments/177392.html</wfw:comment><comments>http://www.blogjava.net/tj19832/archive/2008/01/24/177392.html#Feedback</comments><slash:comments>19</slash:comments><wfw:commentRss>http://www.blogjava.net/tj19832/comments/commentRss/177392.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tj19832/services/trackbacks/177392.html</trackback:ping><description><![CDATA[短到只有几个字的前一篇就当是序好了。还不至于厚脸皮到那么几个字就当成是一，虽然我是很想。。。。<br />
<br />
我想了一天，我为什么要选Ajax？或者说Ajax的优势在哪里？大概有：<br />
<ul>
    <li>对公司而言，有丰富的现有资源可供整合（Applet、ActiveX控件）。</li>
    <li>完全开放的平台、完美的技术组合：HTML+CSS+Javascript、技术框架已经非常成熟。</li>
    <li>容易上手，普及率高（这对项目经理来说是多致命的诱惑），足够多的在线资源可供搜索，无数同行的blog和论坛为你的应用之路保驾护航。（尤其在中文方面，一个js的问题查找解决办法很容易的，几乎你的每一个问题都有人解决过了，而一个Flex的，麻烦输英文吧，还不一定有人解决过，我就找到了好多许愿的帖子，愿这个问题在下一个版本中解决。。。。。。）。</li>
    <li>单个页面足够小，几乎没有加载时间（相对于Flex）</li>
    <li>各层次完美的分离，而且是真的分离了（相对于Flex，Flex只是程序结构上分离了，部署了之后不会有太大的区别）。你不得不承认，作为前辈Ajax的结构相当完美。</li>
    <li>对&#8220;敏捷&#8221;友好，容易TDD。</li>
    <li>配有强大成熟的自动化测试工具助你完成健壮的程序。<br />
    </li>
</ul>
如果以上还不足以让你觉得Ajax有什么吸引人的，那么麻烦点击下面几个链接：<br />
什么叫丰富的资源，以此为例：<a href="http://www.java2s.com/Code/JavaScript/CatalogJavaScript.htm"><br />
http://www.java2s.com/Code/JavaScript/CatalogJavaScript.htm</a><a href="http://www.java2s.com/Tutorial/JavaScript/CatalogJavaScript.htm"></a><a href="http://www.java2s.com/Code/JavaScript/CatalogJavaScript.htm"></a><a href="http://www.java2s.com/Tutorial/JavaScript/CatalogJavaScript.htm"></a><a href="http://www.java2s.com/Code/JavaScript/CatalogJavaScript.htm"></a><a href="http://www.java2s.com/Tutorial/JavaScript/CatalogJavaScript.htm"></a><a href="http://www.java2s.com/Code/JavaScript/CatalogJavaScript.htm"></a><br />
<a href="http://www.java2s.com/Tutorial/JavaScript/CatalogJavaScript.htm">http://www.java2s.com/Tutorial/JavaScript/CatalogJavaScript.htm</a><br />
<a href="http://www.java2s.com/Code/JavaScriptReference/CatalogJavaScriptReference.htm">http://www.java2s.com/Code/JavaScriptReference/CatalogJavaScriptReference.htm</a><br />
<a href="http://www.java2s.com/Code/HTMLCSS/CatalogHTMLCSS.htm">http://www.java2s.com/Code/HTMLCSS/CatalogHTMLCSS.htm</a><a href="http://www.java2s.com/Code/HTMLCSSReference/CatalogHTMLCSSReference.htm"></a><a href="http://www.java2s.com/Code/HTMLCSS/CatalogHTMLCSS.htm"></a><a href="http://www.java2s.com/Code/HTMLCSSReference/CatalogHTMLCSSReference.htm"></a><a href="http://www.java2s.com/Code/HTMLCSS/CatalogHTMLCSS.htm"></a><br />
http://www.java2s.com/Code/HTMLCSSReference/CatalogHTMLCSSReference.htm<br />
什么叫成熟的框架，HTML和CSS已经在全世界广泛应用了许多年，在JavaScript领域也有成熟的类库和控件库，比如：<a href="http://www.prototypejs.org/"><br />
http://www.prototypejs.org/</a><br />
<a href="http://www.extjs.com/">http://www.extjs.com/</a> 不知道ext又怎么踩着gfw尾巴了，链接被重置，友情提示，请准备好穿墙工具查看<br />
<a href="http://jquery.com/">http://jquery.com/</a><br />
如果上面的那些还不能让你满足，那么Tin的ppt应该可以喂饱你了，其中甚至推荐了可以使ie6的bug消失的神奇js库和CSS框架：<br />
<a href="http://www.haokanbu.com/story/5889/">http://www.haokanbu.com/story/5889/</a><br />
<a href="http://www.haokanbu.com/story/5892/">http://www.haokanbu.com/story/5892/</a><br />
如果你觉得Flex的开发工具非常好，相对于Flex Builder我们也有这些开发工具（虽然他们也支持Flex）：<br />
<a href="http://www.aptana.com/">http://www.aptana.com/</a><br />
<a href="http://www.jetbrains.com/idea/features/javascript_editor.html">http://www.jetbrains.com/idea/features/javascript_editor.html</a><br />
有上面的这些东西辅助，基本的项目我们都可以搞定，为什么要选择Flex呢？而且根据我的开发经验Flex有下面几个缺点：<br />
<ul>
    <li>&nbsp;Flex编译出的程序过于庞大，什么都不做都有几百K，如果加入一个字库的话更是会有上M的大小，虽然现在采用了RSL的方式，解决了一些尴尬局面，但是也不能改变其无法广泛使用在广域网上的境地。</li>
    <li>Flex的编译速度慢，相传全部用as而不使用mxml可以提高编译速度（可问题出来了，那我的Flex操作性就变差了，跟Ajax有啥区别）</li>
    <li>如果选择AIR，那就不能利用公司现有的web资源，比如一些activex控件、applet等，需要重新开发。说句题外话，当你不得不调用这些本地相关的玩意时，从一定程度上影响了他的跨平台的能力。</li>
</ul>
既然这样，Flex这种玩意还有啥选择的必要吗？<br />
休息。。。。。。<br />
<img src ="http://www.blogjava.net/tj19832/aggbug/177392.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tj19832/" target="_blank">咖啡屋的鼠标</a> 2008-01-24 01:28 <a href="http://www.blogjava.net/tj19832/archive/2008/01/24/177392.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ajax还是Flex？</title><link>http://www.blogjava.net/tj19832/archive/2008/01/23/177165.html</link><dc:creator>咖啡屋的鼠标</dc:creator><author>咖啡屋的鼠标</author><pubDate>Tue, 22 Jan 2008 17:12:00 GMT</pubDate><guid>http://www.blogjava.net/tj19832/archive/2008/01/23/177165.html</guid><wfw:comment>http://www.blogjava.net/tj19832/comments/177165.html</wfw:comment><comments>http://www.blogjava.net/tj19832/archive/2008/01/23/177165.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tj19832/comments/commentRss/177165.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tj19832/services/trackbacks/177165.html</trackback:ping><description><![CDATA[听Tin的Topic之前就在考虑自己应该在什么情况下用Flex，听了Tin的topic之后更得考虑这个问题了。<br />
Ajax（我暂且借用这个名词）在强大的开源库及现代化的ide的支持下，已经很强大。<br />
Flex这时过来横插一杠子，实在是很没意思。取代Ajax，绝不是一个很好的主意。（虽然我曾经这么想过）<br />
面对强大的Ajax和超炫的Flex，我总是会问自己很多问题：<br />
Flex可堪大用吗？Flex和Ajax是进一步互补还是在一次握手之后分别向两个领域发展呢？Flex会是前端的Java吗？AIR是Flex的未来吗？BS模式会不再成为主流，CS模式会再一次流行吗？<br />
夜已深，悍然歇晌，暂时先给自己挖个坑好了，省的自己忘了这个问题。<br />
<br />
<img src ="http://www.blogjava.net/tj19832/aggbug/177165.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tj19832/" target="_blank">咖啡屋的鼠标</a> 2008-01-23 01:12 <a href="http://www.blogjava.net/tj19832/archive/2008/01/23/177165.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Flex中当视频播放到某一时间点时触发事件的样例代码</title><link>http://www.blogjava.net/tj19832/archive/2008/01/20/176630.html</link><dc:creator>咖啡屋的鼠标</dc:creator><author>咖啡屋的鼠标</author><pubDate>Sun, 20 Jan 2008 13:44:00 GMT</pubDate><guid>http://www.blogjava.net/tj19832/archive/2008/01/20/176630.html</guid><wfw:comment>http://www.blogjava.net/tj19832/comments/176630.html</wfw:comment><comments>http://www.blogjava.net/tj19832/archive/2008/01/20/176630.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tj19832/comments/commentRss/176630.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tj19832/services/trackbacks/176630.html</trackback:ping><description><![CDATA[如果使用VideoDisplay，那么他有一个属性，叫cuePoints，值类型为数组，数组中的每个元素要求有两个属性，一个是name，类型为字符串，一个是time，类型为数字，表示触发时间的秒数。例如下面的代码，当播放到3s时将弹出一个对话框。这用来解决一些播放到某一时间点触发某事件的情况。<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">&lt;?</span><span style="color: #ff00ff;">xml&nbsp;version="1.0"&nbsp;encoding="utf-8"</span><span style="color: #0000ff;">?&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;LearnCurPointEvent.mxml&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">mx:Application&nbsp;</span><span style="color: #ff0000;">xmlns:mx</span><span style="color: #0000ff;">="http://www.adobe.com/2006/mxml"</span><span style="color: #ff0000;">&nbsp;layout</span><span style="color: #0000ff;">="vertical"</span><span style="color: #ff0000;">&nbsp;creationComplete</span><span style="color: #0000ff;">="init()"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">mx:Script</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;![CDATA[</span><span style="color: #808080;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;mx.controls.Alert;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;mx.events.CuePointEvent;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[Bindable]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;var&nbsp;myCuePoints:Array&nbsp;=&nbsp;[<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;name:&nbsp;"first",&nbsp;time:&nbsp;3}];&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;function&nbsp;init():void{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.c_mainVideoDisplay.cuePoints&nbsp;=&nbsp;myCuePoints;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.c_mainVideoDisplay.addEventListener(CuePointEvent.CUE_POINT,cue_PointHandler);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;function&nbsp;cue_PointHandler(event:CuePointEvent):void{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c_mainVideoDisplay.pause();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Alert.show("It&nbsp;plays&nbsp;"&nbsp;+&nbsp;event.cuePointTime&nbsp;+"s.","",4,null,go);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;function&nbsp;go(event:Event):void{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c_mainVideoDisplay.play();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">]]&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">mx:Script</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">mx:VideoDisplay&nbsp;</span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="c_mainVideoDisplay"</span><span style="color: #ff0000;">&nbsp;width</span><span style="color: #0000ff;">="320"</span><span style="color: #ff0000;">&nbsp;height</span><span style="color: #0000ff;">="240"</span><span style="color: #ff0000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cuePointManagerClass</span><span style="color: #0000ff;">="mx.controls.videoClasses.CuePointManager"</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;source</span><span style="color: #0000ff;">="phone.flv"</span><span style="color: #ff0000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;autoPlay</span><span style="color: #0000ff;">="false"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">mx:Button&nbsp;</span><span style="color: #ff0000;">label</span><span style="color: #0000ff;">="播放"</span><span style="color: #ff0000;">&nbsp;click</span><span style="color: #0000ff;">="go(event)"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">mx:Application</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span></div>
<img src ="http://www.blogjava.net/tj19832/aggbug/176630.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tj19832/" target="_blank">咖啡屋的鼠标</a> 2008-01-20 21:44 <a href="http://www.blogjava.net/tj19832/archive/2008/01/20/176630.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>