您的位置:首页 > 其它

swf之间的交互(上)全局变量VS全局派发事件

2011-04-12 22:14 183 查看
1全局变量:

通过定义一个全局的类里面定义静态变量用来存储swf1中要传给swf2的参数值,swf2通过读取静态变量中的值来获取swf1中传过来的值。。。。。。。这个很好理解就不多说了。

2全局派发(以一个demo来说明)

----自定义一个事件(注意继承自Event)给他一个私有变量用来存储传递的参数(当然根据情况可以多个)

package event
{
import flash.events.Event;

public class MessageEvent extends Event
{
private var msg:String;
public function MessageEvent(msg:String,type:String, bubbles:Boolean=false, cancelable:Boolean=false)
{
super(type, bubbles, cancelable);
this.msg=msg;
}
public function getmessage():String
{
return msg;
}
}
}


....创建一个全局派发类继承自EventDispatcher(使用单例模式提高效率,便于管理)

package event
{
import flash.events.EventDispatcher;
import flash.events.IEventDispatcher;

public class MessageDispatch extends EventDispatcher
{
private static var instance:MessageDispatch;
public function MessageDispatch(target:IEventDispatcher=null)
{
super(target);
}
public static function getInstance():MessageDispatch
{
if(instance==null)
{
instance=new MessageDispatch();
}
return instance;
}

public var msg:String
}
}


...实现

swf1:left.swf

<?xml version="1.0" encoding="utf-8"?>
<s:Panel xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
height="300" width="300">
<s:layout>
<s:BasicLayout/>
</s:layout>

<fx:Script>
<![CDATA[
import event.MessageDispatch;
import event.MessageEvent;
protected function button1_clickHandler(event:MouseEvent):void
{
MessageDispatch.getInstance().dispatchEvent(new MessageEvent(t.text,"sent"));
MessageDispatch.getInstance().msg=t.text;
}
]]>
</fx:Script>

<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
</fx:Declarations>
<s:TextArea x="10" y="10" width="277" height="218" id="t"/>
<s:Button x="218" y="236" label="按钮" click="button1_clickHandler(event)"/>
</s:Panel>


swf2:right.swf

<?xml version="1.0" encoding="utf-8"?>
<s:Panel xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
creationComplete="panel1_creationCompleteHandler(event)"
height="300" width="300">
<s:layout>
<s:BasicLayout/>
</s:layout>
<fx:Script>
<![CDATA[
import event.MessageDispatch;
import event.MessageEvent;

import mx.events.FlexEvent;

protected function panel1_creationCompleteHandler(event:FlexEvent):void
{
MessageDispatch.getInstance().addEventListener("send",setMsg);
}

private function setMsg(e:MessageEvent):void
{
txt.text=e.getmessage();
}

]]>
</fx:Script>
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
</fx:Declarations>
<s:TextArea x="10" y="10" width="278" height="247" id="txt"/>
</s:Panel>


主工程

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" xmlns:local="*">
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
</fx:Declarations>
<local:left x="0" y="1" height="300">
</local:left>
<local:right x="308" y="-1">
</local:right>
</s:Application>


待续。。。。。。。。。。。。。。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: