【问题标题】:Actionscript dispatch custom event with informationActionscript 发送带有信息的自定义事件
【发布时间】:2023-03-08 16:18:01
【问题描述】:

在actionscript中,我们可以用这个来调度事件:

dispatchEvent(new Event("MyEvent"));

然后通过这个监听事件:

stage.addEventListener("MyEvent", MyFunc);

但是我怎样才能通过事件传递附加信息,以便我可以在MyFunc 函数中访问它?

谢谢。

【问题讨论】:

    标签: flash events actionscript


    【解决方案1】:

    您可以使用 Subash Selvaraj 提供的示例,这是一个很好的示例。 我唯一的观点是:在我看来,每次要调度此事件时最好避免创建一个单独的变量(用于事件实例)。您可以改为向类构造函数添加其他参数。 因此,您的新事件类可能如下所示:

    import flash.events.Event;
    
    public class MyEvent extends Event
    {
        public var objEventData:Object;
    
        public function MyEvent(type:String, event_data:Object=null, bubbles:Boolean=false, cancelable:Boolean=false)
        {
             super(type, bubbles, cancelable);
             objEventData = event_data;
        }
    
        public override function clone():Event 
        {
            return new MyEvent(type, objEventData, bubbles, cancelable);
        } 
    
    }
    

    在这种情况下,您可以像这样调度您的事件:

    dispatchEvent(new MyEvent(EVENT_TYPE, YOUR_DATA) );
    

    之后,您可以从事件处理程序访问传递的数据,即 MyFunc:

    private function MyFunc(event:MyEvent):void
    {
        var buff:Object = event.objEventData;
    }
    

    您可以将 Object 类替换为您需要的任何类型。

    【讨论】:

      【解决方案2】:
        package {
              import flash.events.Event;    
      
              public class MyEvent extends Event {
                  public static const TEST:String = "TEST";
                  public myValue:Object = new Object();
                  public function MyEvent (type:String, bubbles:Boolean=true, cancelable:Boolean=false) {
                      // constructor code
                      super(type, bubbles, cancelable);
                  }
                  public override function clone():Event
                  {
                      return new MyEvent(type, bubbles,cancelable);
                  }
      
              }
      
          }
      

      在你的主文件中这样使用,

      private var eventInstance:MyEvent;
      eventInstance= new MyEvent(MyEvent.TEST);
      eventInstance.myValue = yourObject;
      dispatchEvent(eventInstance);
      

      希望对你有帮助。

      【讨论】:

        【解决方案3】:

        您必须创建一个自定义事件,并为其添加自定义属性。这是一个例子。

            public class CustomEvent extends Event
            {
                 public function CustomEvent (type:String, 
                                              bubbles:Boolean=true,          
                                              cancelable:Boolean=false)
                 {
                      super(type, bubbles, cancelable);
                 }
        
                 public var dataYouWantToPass:OfSomeClass;
             }
        

        bubbles=true 取决于您是否希望它在显示列表中冒泡。

        【讨论】:

        • 感谢您的回答。但是气泡和可取消是什么意思?如何取消活动?
        • @user1995781 通过调用 event.preventDefault();
        猜你喜欢
        • 2013-11-09
        • 1970-01-01
        • 2021-02-13
        • 2021-03-24
        • 2015-04-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多