Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 如何调度添加了数据的事件-AS3_Actionscript 3_Flash_Apache Flex_Events_Dispatchevent - Fatal编程技术网

Actionscript 3 如何调度添加了数据的事件-AS3

Actionscript 3 如何调度添加了数据的事件-AS3,actionscript-3,flash,apache-flex,events,dispatchevent,Actionscript 3,Flash,Apache Flex,Events,Dispatchevent,有谁能给我一个简单的例子,告诉我如何在actionscript3中调度一个附加了对象的事件,比如 dispatchEvent( new Event(GOT_RESULT,result)); 这里的result是我希望随事件一起传递的对象。如果您希望通过事件传递对象,您应该创建一个自定义事件。代码应该是这样的 public class MyEvent extends Event { public static const GOT_RESULT:String = "gotResult";

有谁能给我一个简单的例子,告诉我如何在actionscript3中调度一个附加了对象的事件,比如

dispatchEvent( new Event(GOT_RESULT,result));

这里的
result
是我希望随事件一起传递的对象。

如果您希望通过事件传递对象,您应该创建一个自定义事件。代码应该是这样的

public class MyEvent extends Event
{
    public static const GOT_RESULT:String = "gotResult";

    // this is the object you want to pass through your event.
    public var result:Object;

    public function MyEvent(type:String, result:Object, bubbles:Boolean=false, cancelable:Boolean=false)
    {
        super(type, bubbles, cancelable);
        this.result = result;
    }

    // always create a clone() method for events in case you want to redispatch them.
    public override function clone():Event
    {
        return new MyEvent(type, result, bubbles, cancelable);
    }
}
然后您可以像这样使用上面的代码:

dispatchEvent(new MyEvent(MyEvent.GOT_RESULT, result));
如果有必要,你可以收听这个节目

addEventListener(MyEvent.GOT_RESULT, myEventHandler);
// more code to follow here...
protected function myEventHandler(event:MyEvent):void
{
    var myResult:Object = event.result; // this is how you use the event's property.
}

如果设计正确,您不必向事件传递对象。
相反,您应该在分派类上创建一个公共var

public var myObject:Object;

// before you dispatch the event assign the object to your class var
myObject = ....// whatever it is your want to pass
// When you dispatch an event you can do it with already created events or like Tomislav wrote and create a custom class.

// in the call back just use currentTarget
public function myCallBackFunction(event:Event):void{

  // typecast the event target object
  var myClass:myClassThatDispatchedtheEvent = event.currentTarget as myClassThatDispatchedtheEvent 
  trace( myClass.myObject )// the object or var you want from the dispatching class.


这篇文章有点老,但如果它能帮助某人,您可以使用DataEvent类,如下所示:

dispatchEvent(new DataEvent(YOUR_EVENT_ID, true, false, data));

你自己也举了个例子。您到底被困在哪里?感谢您的回复,我是as3新手,希望知道如何通过dispatch event传递对象?您必须扩展event类,以创建自己的自定义事件对象。请看这里的一个例子:在我的例子中,结果是classA类型的-因此我不确定是否必须编写自定义事件,如果必须如何编写它..你是说传递对象是一个糟糕的设计决策,还是仅仅给出了一个替代方案?我这样问是因为Flash/Flex API似乎非常频繁地传递对象;我恭敬地表示不同意。向事件对象添加值是很好的封装。在许多情况下,我更喜欢这种方法,而不是内省currentTarget(或target)从实例上的公共变量检索数据。我发现这在显示列表中特别有用,其中一个事件将在显示层次结构中出现多个级别。虽然我有时使用这种方法,但它并不适合所有场景(您的第一句话可能会建议)。例如,如果有多个类调度同一事件(但没有公共子类),那么在这些情况下,自定义事件是一个更干净的路由。另外,关于利益分离还有一些话要说。如果分派事件的类没有理由知道正在侦听/处理事件的类,那么定制事件也更适合这种情况。使单元测试更容易哇,这似乎是一个棘手的问题subject@bfavaretto是的,这更像是一种选择。每种模式都有其优缺点。这就是应该如何做到的。一些小的补充;对于事件数据,我总是使用getter字段而不是公共字段。我还将GOT_RESULT重命名为RESULT以保持清晰。顺便说一句,我创建了一个在线工具来创建自定义as3事件,它可以帮助更快地设置。请随意使用。我同意将事件常量重命名为RESULT,我只是尽量让事情尽可能接近OP的示例变量名,以避免可能出现的任何混淆。@Tomislav Dyulgerov:嘿,谢谢你,伙计……你的代码非常有效,谢谢你的帮助,我非常感谢。