﻿<?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-samtiger-文章分类-flex基础</title><link>http://www.blogjava.net/samyang/category/44592.html</link><description>&lt;br&gt;
&lt;B&gt;QQ:418148757&lt;/B&gt;&lt;br&gt;
&lt;B&gt;Name:yangchuan&lt;/B&gt;&lt;br&gt;
&lt;b&gt;&lt;/b&gt;</description><language>zh-cn</language><lastBuildDate>Thu, 15 Apr 2010 23:24:49 GMT</lastBuildDate><pubDate>Thu, 15 Apr 2010 23:24:49 GMT</pubDate><ttl>60</ttl><item><title>flex基础之事件机制</title><link>http://www.blogjava.net/samyang/articles/318366.html</link><dc:creator>sam.chuan.yang</dc:creator><author>sam.chuan.yang</author><pubDate>Wed, 14 Apr 2010 13:41:00 GMT</pubDate><guid>http://www.blogjava.net/samyang/articles/318366.html</guid><wfw:comment>http://www.blogjava.net/samyang/comments/318366.html</wfw:comment><comments>http://www.blogjava.net/samyang/articles/318366.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/samyang/comments/commentRss/318366.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/samyang/services/trackbacks/318366.html</trackback:ping><description><![CDATA[<p>Flex事件执行流程：<br />
第一阶段为：1:捕获阶段，第二阶段为：（2：目标阶段，3：冒泡阶段）。<br />
所以：addEventListener方法注册的监听器有两种，第一种是处理捕获阶段的监听器（addEventListener的第三个参数<code>useCapture</code> 为true）<br />
第二种就是处理目标和冒泡阶段的监听器（第三个参数<code>useCapture</code> 为false）。<br />
<br />
捕获阶段流程：<br />
Flex会去查找事件的触发源，它是通过根显示元素(root display object)逐层向下寻踪，并从上往下，依次触发这些节点的当前事件的处理函数（如果他们都用捕获阶段的监听器注册了这个事件）直到找到<strong>事件发起源头的父节点</strong>。并触发完父节点的这个事件为止。但它不会调用事件触发源节点的事件。<br />
例如：<br />
test.mxml文件下：<br />
application节点--vbox（id=vb）节点--button（id=bt）节点。</p>
<p><br />
如果在application的creationComplete中：将以上所有组件的click事件注册为捕获监听器。<br />
如：<br />
addEventListener(MouseEvent.CLICK, btnClick2, true);&nbsp; <br />
vb.addEventListener(MouseEvent.CLICK, btnClick3,true);&nbsp; <br />
bt.addEventListener(MouseEvent.CLICK, btnClick4,true);&nbsp; <br />
如果在bt上点击，执行流程如下：<br />
Flash Player会去查找事件的触发源（bt），通过根显示元素(root display object)（这里就是application）逐层向下寻踪，并从上往下，依次调用它们的click事件（如果他们都注册了捕获阶段的click事件）直到找到事件的发起源头的父节点，上面例子中会找到vb，并执行完vb的click事件后，就不再查找下边的bt组件和执行它的click事件。</p>
<p>第二阶段：<br />
一般情况下，第二阶段的目标阶段，也是执行mxml文档的目标节点配置的那个事件处理函数，然后再处理对应的监听器（处理目标和冒泡阶段的监听器）注册的那个处理函数。</p>
<p>&nbsp;如果文档该节点，没有配置事件处理，则只执行通过addEventListener注册的事件处理方法，否则，如果配置了，就先执行mxml的配置函数处理，接着处理通过监听器注册的函数。</p>
<p>最后就是冒泡阶段：<br />
这个阶段与捕获阶段相反，它会从从目标节点的父节点开始依次向上查找并执行父节点的mxml配置事件和通过监听器注册的事件处理函数。（这些处理函数也是用处理目标和冒泡阶段的监听器注册的）<br />
<br />
<br />
也就是说：捕获阶段的事件触发只能是用处理这个阶段的监听器去注册。目标和冒泡阶段的事件触发，也只能是处理这个阶段的监听器去注册。如果，要让同一个事件，在捕获阶段或目标和冒泡阶段都执行的话，需要用addEventListener注册两次，将第三个参数<code>useCapture</code> true和false各设置一次。</p>
<img src ="http://www.blogjava.net/samyang/aggbug/318366.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/samyang/" target="_blank">sam.chuan.yang</a> 2010-04-14 21:41 <a href="http://www.blogjava.net/samyang/articles/318366.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>flex基础之函数对象</title><link>http://www.blogjava.net/samyang/articles/318237.html</link><dc:creator>sam.chuan.yang</dc:creator><author>sam.chuan.yang</author><pubDate>Wed, 14 Apr 2010 02:41:00 GMT</pubDate><guid>http://www.blogjava.net/samyang/articles/318237.html</guid><wfw:comment>http://www.blogjava.net/samyang/comments/318237.html</wfw:comment><comments>http://www.blogjava.net/samyang/articles/318237.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/samyang/comments/commentRss/318237.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/samyang/services/trackbacks/318237.html</trackback:ping><description><![CDATA[Function<br />
&nbsp;&nbsp;&nbsp;&nbsp; 在ecamscript规范中。函数都是一个Function类型的对象，
<p>而普通函数，和类定义的普通方法，以及类静态方法都有不同的地方。<br />
相同点：<br />
&nbsp; 他们都是Function类的对象。<br />
不同点：<br />
&nbsp;&nbsp; 在作函数绑定上，（函数绑定：就是将函数赋值给另一个函数，或者利用call或apply方法将函数绑定到别的对象上调用）<br />
&nbsp;&nbsp; 如果是类的普通函数绑定到别的对象上去，那么函数中的this，指的就是该类的实例，无论你是用call方式，还是将函数赋值给另一个对象，this始终指的就是先前函数所在的那个类的实例对象，而如果是一个普通函数，this指的就是当前绑定到的那个关联对象。<br />
给对象动态创建的方法和普通函数一样，因为该方法其实就是将一个匿名的普通函数赋给对象的方法变量的，如：obj.fun=function(str){alert(str)}&nbsp;。<br />
绑定方式：比如obj.fun.call(obj2) 这个方式就是将fun函数绑定到obj2上执行<br />
第二种方式： obj2.funName= obj.fun; obj2.funName();<br />
为什么说第二种方式也是一种绑定，写个例子证明一下：<br />
如果obj.fun()等价于obj.fun.call(obj);<br />
如果：obj2.funName= obj.fun; //因为函数是Function类型的对象，那么obj2.funName和 obj.fun一样都是引用同一个对象。<br />
那么obj2.funName（）也可等价于obj.fun.call(obj2);</p>
<p><br />
说明一下：类的静态函数是定义类的时候就存在了它的Function对象，而类的普通函数则是在类 实例化的时候才生成对应的函数的Function对象<br />
<br />
关于call方法，详见Function的call方法.api文档。<br />
函数绑定：其实就是指，将一个函数临时的赋给某个对象，该对象就临时的拥有了这个函数，但实际上对象上是没有这个函数定义的</p>
<img src ="http://www.blogjava.net/samyang/aggbug/318237.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/samyang/" target="_blank">sam.chuan.yang</a> 2010-04-14 10:41 <a href="http://www.blogjava.net/samyang/articles/318237.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>flex之弹出窗口数据传递</title><link>http://www.blogjava.net/samyang/articles/317950.html</link><dc:creator>sam.chuan.yang</dc:creator><author>sam.chuan.yang</author><pubDate>Sat, 10 Apr 2010 09:07:00 GMT</pubDate><guid>http://www.blogjava.net/samyang/articles/317950.html</guid><wfw:comment>http://www.blogjava.net/samyang/comments/317950.html</wfw:comment><comments>http://www.blogjava.net/samyang/articles/317950.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/samyang/comments/commentRss/317950.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/samyang/services/trackbacks/317950.html</trackback:ping><description><![CDATA[<p>弹出窗口：<br />
利用PopUpManager我们可以把flex容器组件作为一种弹出窗口，这样也是便于我们将程序分块编写的方式之一。我们通常会自定义一个容器组件，作为弹出窗口的内容。<br />
举一个例子来说明我们可能利用弹出窗口的地方。</p>
我们做用户信息的增删改查。第一步我们会做一个Module，用于布置datagrid组件和增删查三个按钮，那么在这个Module中我们的datagrid主要就是用于显示查询到的用户数据列表。那么增加按钮事件就是我们弹出一个窗口来编辑数据，完成后在该弹出窗口中点击确定按钮，数据将传送给Module的一个函数。并由这个函数与后台交互，最终使数据通过后台添加到数据库。那么这是弹出窗口向父窗体传递数据的例子，另外我们在Module的datagrid中双击选中的数据，也会弹出窗口，并将该条datagrid的这条记录数据显示在弹出窗口的相应输入框中，供用户编辑。当然这就是父窗体向弹出窗口传递数据的例子了。<br />
在flex中，我所知道的父子窗口传递数据有两种，姑且先让我这么命名并区分它们：一种是事件处理型，另一种就是函数绑定型。<br />
第一种方式（事件处理型）：先看代码，假设我们已经自定义好弹出窗体组件。那么看我们怎么在Module（也就是父窗体）中来调用弹出窗体的。
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #008080">&nbsp;1</span><img id="Codehighlighter1_62_434_Open_Image" onclick="this.style.display='none'; Codehighlighter1_62_434_Open_Text.style.display='none'; Codehighlighter1_62_434_Closed_Image.style.display='inline'; Codehighlighter1_62_434_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" /><img style="display: none" id="Codehighlighter1_62_434_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_62_434_Closed_Text.style.display='none'; Codehighlighter1_62_434_Open_Image.style.display='inline'; Codehighlighter1_62_434_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" /><span style="color: #000000">protected&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;button1_clickHandler(event:MouseEvent):</span><span style="color: #0000ff">void</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_62_434_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_62_434_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">这里是新创建一个弹出窗体对象，UserWin为自定义的一个容器组件对象</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #008000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;win:UserWin&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;UserWin();&nbsp;<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;user:TblBsUserType&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;TblBsUserType();<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" /></span><span style="color: #008000">//</span><span style="color: #008000">将user对象传递给弹出窗体，其中data为win里头的一个空对象。在win里边的代码是public&nbsp;data:Object={};</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #008000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;win.data.user&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;user;<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" /></span><span style="color: #008000">//</span><span style="color: #008000">通过这种方法给win添加一个事件监听器</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #008000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;win.addEventListener(</span><span style="color: #000000">"</span><span style="color: #000000">sendData</span><span style="color: #000000">"</span><span style="color: #000000">,onSendData);<br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PopUpManager.addPopUp(win,</span><span style="color: #0000ff">this</span><span style="color: #000000">,</span><span style="color: #0000ff">true</span><span style="color: #000000">);&nbsp;<br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PopUpManager.centerPopUp(win);<br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img id="Codehighlighter1_478_565_Open_Image" onclick="this.style.display='none'; Codehighlighter1_478_565_Open_Text.style.display='none'; Codehighlighter1_478_565_Closed_Image.style.display='inline'; Codehighlighter1_478_565_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" /><img style="display: none" id="Codehighlighter1_478_565_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_478_565_Closed_Text.style.display='none'; Codehighlighter1_478_565_Open_Image.style.display='inline'; Codehighlighter1_478_565_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" />private&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;onSendData(e:Event):</span><span style="color: #0000ff">void</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_478_565_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_478_565_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;user:UserType&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;e.currentTarget.data.user;<br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Alert.show(ro.toString());<br />
</span><span style="color: #008080">16</span><span style="color: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
如上注释，我们父窗体向子窗体传递数据的时候其实就是像子窗体的一个已存在的对象中动态添加数据属性即可。这一点是ecmascript的规范，也是他的一个很好的优点。<br />
最后那个方法，其实就是我们处理弹出窗口传数据给父窗体的一个处理过程，其实很简单，为了解耦，我们一般不会在弹出窗口中做数据的处理过程，而是直接由弹出窗口传回数据，交给父窗体处理。那么事件分发处理的方式，显而易见就是我们在创建弹出窗体对象的时候，动态的给子窗体注册一个事件监听器，，然后弹出窗体的确定按钮中调用dispatchEvent(new Event("sendData"));即可将数据传回给父窗体中定义的那个事件处理函数去处理。其中e.currentTarget表示当前正在使用某个事件侦听器处理 Event 对象的对象。也就是上边的win对象。<br />
第二种函数绑定型，其实就是很简单，我们知道在ecmascript中函数也是一种变量，那么就可以利用这一点将函数作为一个变量传递给弹出窗体，同样可以达到我们处理的效果，<br />
代码如下：<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #008080">&nbsp;1</span><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><span style="color: #000000">protected&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;button1_clickHandler(event:MouseEvent):</span><span style="color: #0000ff">void</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img id="Codehighlighter1_66_339_Open_Image" onclick="this.style.display='none'; Codehighlighter1_66_339_Open_Text.style.display='none'; Codehighlighter1_66_339_Closed_Image.style.display='inline'; Codehighlighter1_66_339_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" /><img style="display: none" id="Codehighlighter1_66_339_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_66_339_Closed_Text.style.display='none'; Codehighlighter1_66_339_Open_Image.style.display='inline'; Codehighlighter1_66_339_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_66_339_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_66_339_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;win:UserWin&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;UserWin();&nbsp;<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;user:TblBsUserType&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;TblBsUserType();<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;win.data.user&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;user;<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;win.data.send&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;add;<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">win.addEventListener("sendData",onSendData);</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #008000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PopUpManager.addPopUp(win,</span><span style="color: #0000ff">this</span><span style="color: #000000">,</span><span style="color: #0000ff">true</span><span style="color: #000000">);&nbsp;<br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PopUpManager.centerPopUp(win);<br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span><span style="color: #008000">//</span><span style="color: #008000">结果处理函数</span><span style="color: #008000"><br />
</span><span style="color: #008080">13</span><span style="color: #008000"><img id="Codehighlighter1_396_480_Open_Image" onclick="this.style.display='none'; Codehighlighter1_396_480_Open_Text.style.display='none'; Codehighlighter1_396_480_Closed_Image.style.display='inline'; Codehighlighter1_396_480_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" /><img style="display: none" id="Codehighlighter1_396_480_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_396_480_Closed_Text.style.display='none'; Codehighlighter1_396_480_Open_Image.style.display='inline'; Codehighlighter1_396_480_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" /></span><span style="color: #000000">private&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;add(user:TblBsUserType):</span><span style="color: #0000ff">void</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_396_480_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_396_480_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img id="Codehighlighter1_446_475_Open_Image" onclick="this.style.display='none'; Codehighlighter1_446_475_Open_Text.style.display='none'; Codehighlighter1_446_475_Closed_Image.style.display='inline'; Codehighlighter1_446_475_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="display: none" id="Codehighlighter1_446_475_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_446_475_Closed_Text.style.display='none'; Codehighlighter1_446_475_Open_Image.style.display='inline'; Codehighlighter1_446_475_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #0000ff">null</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;user.butyId&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">""</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;user.butyId)</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_446_475_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_446_475_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ro.addUser(user);<br />
</span><span style="color: #008080">16</span><span style="color: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">17</span><span style="color: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
<br />
那么在弹出窗体中我们只需要调用data.send(data.user);就可以了。<br />
<br />
备注：其实以上两种方法，为了使用方便，其实都还可以优化的地方，比如，事件处理方式，我们还可以在自定义组件中声明事件<br />
&lt;fx:Metadata&gt;<br />
&nbsp;&nbsp;[Event(name="sendData",type="flash.events.Event")]<br />
&nbsp;&lt;/fx:Metadata&gt;<br />
让使用组件的mxml文档也能显示注册事件，如：&lt;user:UserWin x="115" y="231" sendData=&#8220;sendDataHandler(event)&#8221;&gt;<br />
&nbsp;&lt;/user:UserWin&gt;<br />
<br />
另外，在函数处理方式上，我们是利用函数绑定到对象的方式，来处理数据的，其实，为了使用接口的人更明确一些，我们可以把这个函数预先定义为组件的属性，比如：[Bindale]public&nbsp;var sendData:Function;这样在创建组件对象的地方，就可以明确的把用户自定义的处理函数赋值给这个属性（sendData）。<br />
总之：不管怎么样，事件处理和函数处理都可以完成我们的要求，任选其一即可。<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/samyang/aggbug/317950.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/samyang/" target="_blank">sam.chuan.yang</a> 2010-04-10 17:07 <a href="http://www.blogjava.net/samyang/articles/317950.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>flex 动态创建组件之容器自适应大小</title><link>http://www.blogjava.net/samyang/articles/317935.html</link><dc:creator>sam.chuan.yang</dc:creator><author>sam.chuan.yang</author><pubDate>Sat, 10 Apr 2010 07:59:00 GMT</pubDate><guid>http://www.blogjava.net/samyang/articles/317935.html</guid><wfw:comment>http://www.blogjava.net/samyang/comments/317935.html</wfw:comment><comments>http://www.blogjava.net/samyang/articles/317935.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/samyang/comments/commentRss/317935.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/samyang/services/trackbacks/317935.html</trackback:ping><description><![CDATA[<p>为了节约swf文件的大小，可以采取动态创建组件的方式，那么动态创建组件就要考虑到组件容器自适应大小。<br />
比如：<br />
&lt;s:BorderContainer x="5" y="5" width="100%"&nbsp; right="5" left="5" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; autoLayout="true" id="bc"&gt;<br />
&nbsp;&nbsp;&lt;s:layout &gt;<br />
&nbsp;&nbsp;&nbsp;&lt;s:TileLayout /&gt;<br />
&nbsp;&nbsp;&lt;/s:layout&gt;<br />
&nbsp;&lt;/s:BorderContainer&gt;<br />
我要在上边这个容器里动态装入一些组件，很有可能容器的高度不够装下多个组件，这个时候，就要让程序动态的改变容器的大小。<br />
改变容器的大小可以根据添加的最后一个组件的top和height来决定，那么我们什么时候才能获取得最后一个组件的大小呢？看下边的代码：<br />
</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img id="Codehighlighter1_27_564_Open_Image" onclick="this.style.display='none'; Codehighlighter1_27_564_Open_Text.style.display='none'; Codehighlighter1_27_564_Closed_Image.style.display='inline'; Codehighlighter1_27_564_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_27_564_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_27_564_Closed_Text.style.display='none'; Codehighlighter1_27_564_Open_Image.style.display='inline'; Codehighlighter1_27_564_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"  alt="" /><span style="color: #000000">public&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;init():</span><span style="color: #0000ff">void</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_27_564_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_27_564_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;user:TblBsUserType&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;TblBsUserType();<br />
<img id="Codehighlighter1_139_327_Open_Image" onclick="this.style.display='none'; Codehighlighter1_139_327_Open_Text.style.display='none'; Codehighlighter1_139_327_Closed_Image.style.display='inline'; Codehighlighter1_139_327_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_139_327_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_139_327_Closed_Text.style.display='none'; Codehighlighter1_139_327_Open_Image.style.display='inline'; Codehighlighter1_139_327_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;initFormItem(label:String,porp:String):FormItem</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_139_327_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_139_327_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;fi:FormItem&nbsp;&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">ElementFactory.createFormItem(label,user,porp);<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi.setStyle(</span><span style="color: #000000">"</span><span style="color: #000000">paddingTop</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">10</span><span style="color: #000000">);<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi.setStyle(</span><span style="color: #000000">"</span><span style="color: #000000">paddingLeft</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">20</span><span style="color: #000000">);<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bc.addElement(fi);<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;fi;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;initFormItem(</span><span style="color: #000000">"</span><span style="color: #000000">用户编码：</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">butyId</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;initFormItem(</span><span style="color: #000000">"</span><span style="color: #000000">用&nbsp;户&nbsp;名：</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">butyName</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;initFormItem(</span><span style="color: #000000">"</span><span style="color: #000000">用户密码：</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">butyPassword</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;fi:FormItem</span><span style="color: #000000">=</span><span style="color: #000000">initFormItem(</span><span style="color: #000000">"</span><span style="color: #000000">用户角色：</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">butySate</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">注意下边这种方式可以设置bc的高度吗？？？</span><span style="color: #008000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bc.height&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">fi.top</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;fi.height</span><span style="color: #000000">+</span><span style="color: #000000">10</span><span style="color: #000000">;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span></div>
如果动态创建组件，那么直接获取组件的高度是不行的。像上边这种情况，fi.height的值多数情况是0.<br />
其实根据flex组件的生命周期，我们知道只有在creationComplete事件的时候，组件才完成了它所有的初始化工作，包括组件的位置，样式，大小等信息。所以，要想获得组件的高宽，我们应该在creationComplete事件中来完成这个任务。所以上边<br />
bc.height=fi.top+fi.height+10;<br />
应该修改为：<br />
fi.addEventListener("creationComplete",function(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bc.height =fi.top+ fi.height+10;<br />
&nbsp;&nbsp;&nbsp;&nbsp;});<br />
这样才可以正确设置父容器的高度。<br />
<br />
<br />
 <img src ="http://www.blogjava.net/samyang/aggbug/317935.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/samyang/" target="_blank">sam.chuan.yang</a> 2010-04-10 15:59 <a href="http://www.blogjava.net/samyang/articles/317935.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>