动作脚本3代码设计问题

时间:2009-11-19 08:33:49

标签: flex actionscript-3

我有一个简单的flex3项目和mxml文件(里面有一些)和FMSConnection.as

我有类似的东西

public class FMSConnection extends NetConnection
{
   //this methods is called from the media server 
   public function Message(message:String):void
   {
       //how to display (add it to a textarea) this message, when this method is invoked ?    
   }
}

1 个答案:

答案 0 :(得分:3)

//in the mxml, after FMSConnection is created:
fmsConn.addEventListener(FMSConnection.MESSAGE_RECEIVED, onMessage);

private function onMessage(e:Event):void
{
    fmsConn = FMSConnection(e.target);
    textArea.text += fmsConn.lastMessage;
}

//FMSConnection
public class FMSConnection extends NetConnection
{
    public static const MESSAGE_RECEIVED:String = "messageReceived";

    public var lastMessage:String;

    public function Message(message:String):void
    {
        lastMessage = message;
        dispatchEvent(new Event(MESSAGE_RECEIVED));
    }
}

如果您愿意,可以调度自定义事件并将消息存储在其中,而不是声明lastMessage变量。

//MsgEvent.as
public class MsgEvent extends Event
{
    public static const MESSAGE_RECEIVED:String = "messageReceived";
    public var message:String;
    public function MsgEvent(message:String, type:String)
    {
        super(type);
        this.message = message;
    }
    override public function clone():Event
    {
        return new MsgEvent(message, type);
    }
}

//in the mxml, after FMSConnection is created:
fmsConn.addEventListener(MsgEvent.MESSAGE_RECEIVED, onMessage);

private function onMessage(e:MsgEvent):void
{
    textArea.text += e.message;
}

//FMSConnection
public class FMSConnection extends NetConnection
{
    public function Message(message:String):void
    {
        dispatchEvent(new MsgEvent(message, MsgEvent.MESSAGE_RECEIVED));
    }
}

在这种情况下,不需要覆盖clone方法,但在使用自定义事件时遵循这是一个很好的做法。如果不覆盖clone方法,则在尝试从事件处理程序重新调度自定义事件时会出现运行时错误。