【问题标题】:Flash AS3 - dispatch event from classFlash AS3 - 来自类的调度事件
【发布时间】:2012-03-08 09:16:14
【问题描述】:

我阅读了很多关于调度事件的信息,但仍然无法让它工作。我有一个类,并希望它的事件对使用该类的其他类可见。主类:

import special.proxy.ProxyStream;
public class testproxy extends Sprite
{
    var textspace:TextField=new TextField();
    var proxydata:*;

    public function testproxy()
    {
        textspace.autoSize="left";
        textspace.text="ready";
        addChild(textspace);
        try
        {
        proxydata=new ProxyStream();
        addChild(proxydata);
        proxydata.load(proxyurl_string, fileurl_string);
        proxydata.addEventListener("COMPLETE", complete);
        proxydata.addEventListener(Event.COMPLETE, complete);
        }
        catch(e:*){textspace.text=String(e);}
        setTimeout(checkProgress, 2000);            
    }

    function checkProgress(){textspace.text=proxydata.progressstate;}

    function complete(){textspace.text="loaded";}
}

主类调度事件的类:

import flash.events.*;
public class ProxyStream extends Sprite {

    public var progressstate:String="0";
    //[Event(name="complete", type="flash.events.Event")]
    [Event(name="complete",  type="flash.events.Event.COMPLETE")] 

    private function complete(e:Event):void {
        progressstate="1";
        dispatchEvent(e);
        dispatchEvent(new Event("COMPLETE", true, true));
        //dispatchEvent(new Event(Event.COMPLETE, true, true));
        //dispatchEvent(new DataEvent("COMPLETE", false, false, e.target.data));
    }
}

我们可以看到,代理数据被添加到显示列表中。是的,函数完成触发,因为当我在 2 秒后检查进度状态时,它的值为 1。我尝试了许多不同的事件调度方式。我仍然无法在我的主要课程中获得此类活动。如果可能的话,我还希望能够使用此事件发送数据,而无需创建额外的自己的事件类。感谢您的帮助。

【问题讨论】:

  • 在加载前尝试添加监听器
  • 不确定这是否是问题所在,但 testproxy 类中的完整处理程序没有设置正确的参数(应该是complete(event:Event)。这实际上应该导致编译器错误。) .如果您发布 ProxyStream 类的其余部分,它也可能会有所帮助。
  • 尝试将 dispatchEvent 中的“COMPLETE”更改为小写。 flash.events.Event.COMPLETE == "完成"(小写)
  • 完整的主类代码pastebin.com/mB6XqvkK并导入了一个pastebin.com/ZZvrrBKF 我的输出结果:0 [object Stage] 1 2 file://localhost/C:/Documents and Settings/speedy/Adobe Flash Builder 4.6/testproxy/bin-debug/testproxy.swf 3 4 5 6 8 9 字符串10 11
  • function complete(){textspace.text="loaded";} 必须有一个输入参数,即 function complete(evnt: Event){textspace.text="loaded";}

标签: actionscript-3


【解决方案1】:

您的完整事件列表没有正确的参数。应该是complete(event:Event):void,而不是complete()

【讨论】:

    【解决方案2】:

    在您的ProxyStream 中,只需执行dispatchEvent(e),这将再次从您的ProxyStream 对象调度完整事件。

    在您的testproxy 中,执行以下操作:

    addEventListener(Event.COMPLETE, completeHandler);
    

    还有:

    private function completeHandler(event:Event):void
    {
        textspace.text = "loaded"
    }
    

    我认为这里的主要问题是您的处理函数不接受任何参数,这是一个运行时错误。它应该接受一个参数。

    【讨论】:

      【解决方案3】:

      如果我在你的位置,我会开始使用 Flex 的 mate 框架。

      简而言之,它是您项目的全局事件总线。

      【讨论】:

      • 也许它对想知道如何发送数据的人有用。我使用了 dispatchEvent(new DataEvent(Event.COMPLETE, true, true, e.target.data));在 ProxyStream 类中,并在主类中使用函数 complete(e:DataEvent){textspace.text=e.data;} 感谢 =)
      猜你喜欢
      • 2011-07-19
      • 2014-07-14
      • 1970-01-01
      • 1970-01-01
      • 2011-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多