存档于 'flex cookbook'

flex cookbook学习—1.11使用事件冒泡机制

发表时间:18. 12月, 2009 作者:Freddie.

0

我们需要通过几个类来了解冒泡事件,很多类型的事件都可以冒泡:mouse-down事件,click
事件,keyboard 事件。术语“向上冒泡”指的是事件通过其自身的处理方式从显示列表传递
到应用程序容器,这就像水里的气泡上升到水面那样。当用户点击任何组件时,其事件就会
通过层级向上传递,也就意味着父组件也能监听到click事件,无论哪个子组件发出事件,父
组件都能收到。要想父组件监听所有子组件发出的某一类型的事件,父组件只需添加一个事
件监听器即可收到子组件传递过来的事件。
BubbleComponent:
<mx:HBox xmlns:mx=”http://www.adobe.com/2006/mxml” width=”400″ height=”300″>
    <mx:Script>
        <![CDATA[
            private function sendClick():void{
                trace("BubbleComponent::Click");
            }
        ]]>
    </mx:Script>
    <mx:Button click=”sendClick()”/>
</mx:HBox>
BubbleHolder:
<mx:Canvas xmlns:mx=”http://www.adobe.com/2006/mxml”
    width=”400″ height=”300″ xmlns:ns1=”*”>
    <mx:Script>
        <![CDATA[
            private function handleClick():void{
                trace("BubbleHolder::click");
            }
        ]]>
    </mx:Script>
    <ns1:BubbleComponent x=”0″ y=”0″ click=”handleClick()”>
    </ns1:BubbleComponent>
</mx:Canvas>
BubbleTest(主程序,MXML application)
<mx:Application xmlns:mx=”http://www.adobe.com/2006/mxml” layout=”absolute” xmlns:ns1=”*”>
    <mx:Script>
        <![CDATA[
            private function handleClick():void{
                trace("main prog");
            }
        ]]>
    </mx:Script>
    <ns1:BubbleHolder x=”10″ y=”10″ click=”handleClick()”>
    </ns1:BubbleHolder>
</mx:Application>
BubbleComponent.mxml中的click事件将被广播一直传到应用程序层。
MouseEvent类中的事件序列发出关于此事件的信息,比如click事件和click时鼠标的位置,通
过显示列表到达所有的子节点,接着子节点接收此事件,然后从显示列表返回到Stage。
Stage 检测MouseEvent 并传递它到显示列表,直到找到此事件的目标,这就是用户与之交互
的目标组件,这被称之为捕获阶段。接着,事件目标对象的事件处理函数被调用,这称之为
目标阶段,最后,冒泡阶段触发,发送事件返回给显示列表给其他监听器,所有方式重新回
到Stage [...]

详细内容

1.12使用代码隐藏模式分离MXML和ActionScript

发表时间:18. 12月, 2009 作者:Freddie.

0

标题还真够长的, 说得通俗点,就是把原本要写在mxml里的代码写到as里面去。

其实我个人觉得就是JAVA里面的封装的思想,把代码写到AS里,加上访问限制修饰符,隐藏具体的实现细节。
看代码吧:
CodeBehindComponent.as(as代码):
package com.tub
{
    import mx.containers.Canvas;
    import flash.events.Event;
    public class CodeBehindComponent extends Canvas
    {
        public function CodeBehindComponent()
        {
            super();
            addEventListener(Event.ADDED_TO_STAGE, addedToStageListener);
        }
        protected function addedToStageListener(event:Event):void
        {
            trace(“Added to Stage from Code Behind”);
        }
        protected function clickHandler(event:Event):void
        {
            trace(“click from” + event.target);
        }
    }
}
 
CodeBehindComponent.mxml(mxml代码):
<?xml version=”1.0″ encoding=”utf-8″?>
<cookbook:CodeBehindComponent xmlns:mx=”http://www.adobe.com/2006/mxml”
                              width=”200″
                              height=”400″
                              xmlns:cookbook=”com.tub.*”>
    <mx:Button click=”clickHandler(event)”/>
</cookbook:CodeBehindComponent>
 
asf.mxml(主程序,我这里随便取了个名字,这里把CodeBehindComponent组件拖进去就可以了)
<?xml version=”1.0″ encoding=”utf-8″?>
<mx:Application xmlns:mx=”http://www.adobe.com/2006/mxml” layout=”absolute” xmlns:ns1=”*”>
    [...]

详细内容

1.8在MXML中创建数组或对象

发表时间:18. 12月, 2009 作者:Freddie.

0

1,MXML中创建一维数组:
<mx:Array>
<String>kevin</String>
<String>paul</String>
<String>simon</String>
</mx:Array>
2,MXML 中也可创建二维数组:
<mx:Array>
<mx:Array>
<mx:String>boy</mx:String>
<mx:String>girl</mx:String>
</mx:Array>
<mx:Array>
<mx:String>kevin</mx:String>
</mx:Array>
</mx:Array>
3,MXML中创建对象(Object)
可以使用<mx:Object>标签,并添加所有对象的属性及值
<mx:Object id=”person” firstName=”Kevin” lastName=”too” age=”24″ socialSecurity=”123-45-6789″/>
4,同样,在AS中也可以创建这两种类型的数据,并且可以创建更为复杂的object类型:
var
person:Object = {name:”John Smith”
, age:22,
position:{department:”Accounting”
,
salary:50000, title:”Junior
Accountant”
}, id:303};
 
5, AS中两种创建array的方法:
var arr:Array = new Array(“red”, “blue”, “white”, “black”, “green”, “yellow”);
var noConstructorArray:Array = [2, 4, 6, 8, 10, 12, 14, 16];

详细内容

1.8在MXML中创建数组或对象

发表时间:13. 12月, 2009 作者:Freddie.

0

1,MXML中创建一维数组:
<mx:Array>
<String>kevin</String>
<String>paul</String>
<String>simon</String>
</mx:Array>
2,MXML 中也可创建二维数组:
<mx:Array>
<mx:Array>
<mx:String>boy</mx:String>
<mx:String>girl</mx:String>
</mx:Array>
<mx:Array>
<mx:String>kevin</mx:String>
</mx:Array>
</mx:Array>
3,MXML中创建对象(Object)
可以使用<mx:Object>标签,并添加所有对象的属性及值
<mx:Object id=”person” firstName=”Kevin” lastName=”too” age=”24″ socialSecurity=”123-45-6789″/>
4,同样,在AS中也可以创建这两种类型的数据,并且可以创建更为复杂的object类型:
var
person:Object = {name:”John Smith”
, age:22,
position:{department:”Accounting”
,
salary:50000, title:”Junior
Accountant”
}, id:303};
 
5, AS中两种创建array的方法:
var arr:Array = new Array(“red”, “blue”, “white”, “black”, “green”, “yellow”);
var noConstructorArray:Array = [2, 4, 6, 8, 10, 12, 14, 16];

详细内容

1.6在MXML中添加事件监听器

发表时间:13. 12月, 2009 作者:Freddie.

5

事件监听的方式有很多种,最简单的就是 添加一个函数引用,用该函数来处理这个事件,这种方法就不多说了。
下面要说的是另一种:传递事件对象本身给这个函数,每次组件发出该事件时,组件也会发送Event类型
的对象给监听它的处理函数
<mx:HBox xmlns:mx=”http://www.adobe.com/2006/mxml” width=”400″
height=”300″>
<mx:Script>
<![CDATA[
private
function
buttonClick(event:Event):void
{
trace
(event.target.id);
if
(event.target.id == "buttonOne"
)
{
trace
("
button one was clicked"
)
}
else
{
trace
("
button two was clicked"
)
}
}
]]>
</mx:Script>
<mx:Button click=”buttonClick(event)”
label=”Click Me One” id=”buttonOne”/>
<mx:Button click=”buttonClick(event)” label=”Click Me Two”
id=”buttonTwo”/>
</mx:HBox>
Flex中的事件对象以及事件发送系统是一个非常重要的内容。所有事件都包含一个正在侦听该事件时所使用的类型,如果该事件是click事件,那么子对象的click事件就会加入事件监听方法
用户交互的通知,应用程序发送消息或定时发送给服务器,事件对象定义了一些任何监听函数都可以访问的属性,如下所示:
bubbles
指示事件是否是冒泡事件,即是否从已接收任何侦听器进一步沿事件链向上重新发送该事件对象。
cancelable
指示该事件是否是可取消的。
currentTarget
处于活动进程的事件对象。
eventPhase
事件流的当前阶段
Target
事件目标,即发出该事件的对象
Type
事件类型

详细内容

PHVsPjxsaT48c3Ryb25nPndvb19hZHNfcm90YXRlPC9zdHJvbmc+IC0gdHJ1ZTwvbGk+PGxpPjxzdHJvbmc+d29vX2FkXzI1MF9hZHNlbnNlPC9zdHJvbmc+IC0gPC9saT48bGk+PHN0cm9uZz53b29fYWRfMjUwX2ltYWdlPC9zdHJvbmc+IC0gaHR0cDovL3d3dy53b290aGVtZXMuY29tL2Fkcy93b290aGVtZXMtMjUweDI1MC5naWY8L2xpPjxsaT48c3Ryb25nPndvb19hZF8yNTBfdXJsPC9zdHJvbmc+IC0gaHR0cDovL3d3dy53b290aGVtZXMuY29tPC9saT48bGk+PHN0cm9uZz53b29fYWRfY29udGVudF9hZHNlbnNlPC9zdHJvbmc+IC0gPC9saT48bGk+PHN0cm9uZz53b29fYWRfY29udGVudF9kaXNhYmxlPC9zdHJvbmc+IC0gdHJ1ZTwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX2NvbnRlbnRfaW1hZ2U8L3N0cm9uZz4gLSBodHRwOi8vd3d3Lndvb3RoZW1lcy5jb20vYWRzL3dvb3RoZW1lcy00Njh4NjAtMi5naWY8L2xpPjxsaT48c3Ryb25nPndvb19hZF9jb250ZW50X3VybDwvc3Ryb25nPiAtIGh0dHA6Ly93d3cud29vdGhlbWVzLmNvbTwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX2ltYWdlXzE8L3N0cm9uZz4gLSBodHRwOi8vamF2YWZsZXgubmV0L3dwLWNvbnRlbnQvdGhlbWVzL2J1c3liZWUyMC9pbWFnZXMvYWR2ZXJ0XzEyNXgxMjUuZ2lmPC9saT48bGk+PHN0cm9uZz53b29fYWRfaW1hZ2VfMjwvc3Ryb25nPiAtIGh0dHA6Ly9qYXZhZmxleC5uZXQvd3AtY29udGVudC90aGVtZXMvYnVzeWJlZTIwL2ltYWdlcy9hZHZlcnRfMTI1eDEyNS5naWY8L2xpPjxsaT48c3Ryb25nPndvb19hZF9pbWFnZV8zPC9zdHJvbmc+IC0gaHR0cDovL2phdmFmbGV4Lm5ldC93cC1jb250ZW50L3RoZW1lcy9idXN5YmVlMjAvaW1hZ2VzL2FkdmVydF8xMjV4MTI1LmdpZjwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX2ltYWdlXzQ8L3N0cm9uZz4gLSBodHRwOi8vamF2YWZsZXgubmV0L3dwLWNvbnRlbnQvdGhlbWVzL2J1c3liZWUyMC9pbWFnZXMvYWR2ZXJ0XzEyNXgxMjUuZ2lmPC9saT48bGk+PHN0cm9uZz53b29fYWRfaW1hZ2VfNTwvc3Ryb25nPiAtIGh0dHA6Ly9qYXZhZmxleC5uZXQvd3AtY29udGVudC90aGVtZXMvYnVzeWJlZTIwL2ltYWdlcy9hZHZlcnRfMTI1eDEyNS5naWY8L2xpPjxsaT48c3Ryb25nPndvb19hZF9pbWFnZV82PC9zdHJvbmc+IC0gaHR0cDovL2phdmFmbGV4Lm5ldC93cC1jb250ZW50L3RoZW1lcy9idXN5YmVlMjAvaW1hZ2VzL2FkdmVydF8xMjV4MTI1LmdpZjwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX3RvcF9hZHNlbnNlPC9zdHJvbmc+IC0gPC9saT48bGk+PHN0cm9uZz53b29fYWRfdG9wX2Rpc2FibGU8L3N0cm9uZz4gLSBmYWxzZTwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX3RvcF9pbWFnZTwvc3Ryb25nPiAtIGh0dHA6Ly93d3cud29vdGhlbWVzLmNvbS9hZHMvd29vdGhlbWVzLTQ2OHg2MC0yLmdpZjwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX3RvcF91cmw8L3N0cm9uZz4gLSBodHRwOi8vd3d3Lndvb3RoZW1lcy5jb208L2xpPjxsaT48c3Ryb25nPndvb19hZF91cmxfMTwvc3Ryb25nPiAtIGh0dHA6Ly93d3cud29vdGhlbWVzLmNvbTwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX3VybF8yPC9zdHJvbmc+IC0gaHR0cDovL3d3dy53b290aGVtZXMuY29tPC9saT48bGk+PHN0cm9uZz53b29fYWRfdXJsXzM8L3N0cm9uZz4gLSBodHRwOi8vd3d3Lndvb3RoZW1lcy5jb208L2xpPjxsaT48c3Ryb25nPndvb19hZF91cmxfNDwvc3Ryb25nPiAtIGh0dHA6Ly93d3cud29vdGhlbWVzLmNvbTwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX3VybF81PC9zdHJvbmc+IC0gaHR0cDovL3d3dy53b290aGVtZXMuY29tPC9saT48bGk+PHN0cm9uZz53b29fYWRfdXJsXzY8L3N0cm9uZz4gLSBodHRwOi8vd3d3Lndvb3RoZW1lcy5jb208L2xpPjxsaT48c3Ryb25nPndvb19hbHRfc3R5bGVzaGVldDwvc3Ryb25nPiAtIGRlZmF1bHQuY3NzPC9saT48bGk+PHN0cm9uZz53b29fYXV0b19pbWc8L3N0cm9uZz4gLSBmYWxzZTwvbGk+PGxpPjxzdHJvbmc+d29vX2NhdF9leDwvc3Ryb25nPiAtIDwvbGk+PGxpPjxzdHJvbmc+d29vX2NvbW1lbnRfcG9zdHM8L3N0cm9uZz4gLSA1PC9saT48bGk+PHN0cm9uZz53b29fY29udGVudDwvc3Ryb25nPiAtIGZhbHNlPC9saT48bGk+PHN0cm9uZz53b29fY29udGVudF9hcmNoaXZlczwvc3Ryb25nPiAtIGZhbHNlPC9saT48bGk+PHN0cm9uZz53b29fY29udGVudF9mZWF0PC9zdHJvbmc+IC0gZmFsc2U8L2xpPjxsaT48c3Ryb25nPndvb19jdXN0b21fZmF2aWNvbjwvc3Ryb25nPiAtIDwvbGk+PGxpPjxzdHJvbmc+d29vX2ZlYXR1cmVkX3Bvc3RzPC9zdHJvbmc+IC0gMTwvbGk+PGxpPjxzdHJvbmc+d29vX2ZlZWRidXJuZXJfaWQ8L3N0cm9uZz4gLSA8L2xpPjxsaT48c3Ryb25nPndvb19mZWVkYnVybmVyX3VybDwvc3Ryb25nPiAtIDwvbGk+PGxpPjxzdHJvbmc+d29vX2dvb2dsZV9hbmFseXRpY3M8L3N0cm9uZz4gLSA8c2NyaXB0IHR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIj4NCnZhciBnYUpzSG9zdCA9ICgoXCJodHRwczpcIiA9PSBkb2N1bWVudC5sb2NhdGlvbi5wcm90b2NvbCkgPyBcImh0dHBzOi8vc3NsLlwiIDogXCJodHRwOi8vd3d3LlwiKTsNCmRvY3VtZW50LndyaXRlKHVuZXNjYXBlKFwiJTNDc2NyaXB0IHNyYz1cJ1wiICsgZ2FKc0hvc3QgKyBcImdvb2dsZS1hbmFseXRpY3MuY29tL2dhLmpzXCcgdHlwZT1cJ3RleHQvamF2YXNjcmlwdFwnJTNFJTNDL3NjcmlwdCUzRVwiKSk7DQo8L3NjcmlwdD4NCjxzY3JpcHQgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiPg0KdHJ5IHsNCnZhciBwYWdlVHJhY2tlciA9IF9nYXQuX2dldFRyYWNrZXIoXCJVQS0xNjI3Mjk2NC0xXCIpOw0KcGFnZVRyYWNrZXIuX3RyYWNrUGFnZXZpZXcoKTsNCn0gY2F0Y2goZXJyKSB7fTwvc2NyaXB0PjwvbGk+PGxpPjxzdHJvbmc+d29vX2hvbWVfYXJjPC9zdHJvbmc+IC0gdHJ1ZTwvbGk+PGxpPjxzdHJvbmc+d29vX2hvbWVfbGluazwvc3Ryb25nPiAtIHRydWU8L2xpPjxsaT48c3Ryb25nPndvb19ob21lX2xpbmtfZGVzYzwvc3Ryb25nPiAtIDwvbGk+PGxpPjxzdHJvbmc+d29vX2hvbWVfbGlua190ZXh0PC9zdHJvbmc+IC0gSG9tZTwvbGk+PGxpPjxzdHJvbmc+d29vX2hvbWVfdGh1bWJfaGVpZ2h0PC9zdHJvbmc+IC0gOTI8L2xpPjxsaT48c3Ryb25nPndvb19ob21lX3RodW1iX3dpZHRoPC9zdHJvbmc+IC0gMjQ3PC9saT48bGk+PHN0cm9uZz53b29faW1hZ2VfaGVpZ2h0PC9zdHJvbmc+IC0gMjEwPC9saT48bGk+PHN0cm9uZz53b29faW1hZ2Vfc2luZ2xlPC9zdHJvbmc+IC0gZmFsc2U8L2xpPjxsaT48c3Ryb25nPndvb19pbWFnZV93aWR0aDwvc3Ryb25nPiAtIDU0MDwvbGk+PGxpPjxzdHJvbmc+d29vX2xvZ288L3N0cm9uZz4gLSA8L2xpPjxsaT48c3Ryb25nPndvb19tYW51YWw8L3N0cm9uZz4gLSBodHRwOi8vd3d3Lndvb3RoZW1lcy5jb20vc3VwcG9ydC90aGVtZS1kb2N1bWVudGF0aW9uL2J1c3ktYmVlLzwvbGk+PGxpPjxzdHJvbmc+d29vX3BvcHVsYXJfcG9zdHM8L3N0cm9uZz4gLSA1PC9saT48bGk+PHN0cm9uZz53b29fcmVzaXplPC9zdHJvbmc+IC0gdHJ1ZTwvbGk+PGxpPjxzdHJvbmc+d29vX3Nob3J0bmFtZTwvc3Ryb25nPiAtIHdvbzwvbGk+PGxpPjxzdHJvbmc+d29vX3NpbmdsZV9oZWlnaHQ8L3N0cm9uZz4gLSAxMjA8L2xpPjxsaT48c3Ryb25nPndvb19zaW5nbGVfd2lkdGg8L3N0cm9uZz4gLSAxODA8L2xpPjxsaT48c3Ryb25nPndvb190YWJzPC9zdHJvbmc+IC0gZmFsc2U8L2xpPjxsaT48c3Ryb25nPndvb190aGVtZW5hbWU8L3N0cm9uZz4gLSBCdXN5IEJlZTwvbGk+PGxpPjxzdHJvbmc+d29vX3RodW1iX2hlaWdodDwvc3Ryb25nPiAtIDg4PC9saT48bGk+PHN0cm9uZz53b29fdGh1bWJfd2lkdGg8L3N0cm9uZz4gLSA4ODwvbGk+PGxpPjxzdHJvbmc+d29vX3R3aXR0ZXI8L3N0cm9uZz4gLSB0dWIxMjM8L2xpPjxsaT48c3Ryb25nPndvb192aWRlb19jYXRlZ29yeTwvc3Ryb25nPiAtIFNlbGVjdCBhIGNhdGVnb3J5OjwvbGk+PC91bD4=