无法让Actionsript3自定义事件在flex和flash之间工作

时间:2011-07-14 20:24:27

标签: flash flex actionscript-3

我正在尝试使用flash制作的对象将事件发送到我的flex应用程序。

以下是该方案:

  1. 我制作了自定义活动:

    package classes
    {
            import flash.display.MovieClip;
            import flash.events.Event;
    
          public class DecisionNodeEvent extends Event
     {   
    
    public static const NEW_DECISION_NODE:String = 'new_decision_node';
    public var node:MovieClip;
    
    public function DecisionNodeEvent(type:String, bubbles:Boolean=true, cancelable:Boolean=false, node:MovieClip =null)
    {
        super(type, bubbles, cancelable);
        this.node = node;
    
    }
    
    override public function clone():Event
    {
        return new DecisionNodeEvent(type, bubbles, cancelable, node);
    }
    
  2. 然后我从我的自定义对象(Movieclip)发送它:

    var event:DecisionNodeEvent = new DecisionNodeEvent(DecisionNodeEvent.NEW_DECISION_NODE);
    dispatchEvent(event);
    
  3. 最后,我在Flex中创建了一个flash对象的实例,并为它设置了一个监听器和处理程序。

        nodeZero = new Node(0,null);
        nodeZero.addEventListener(DecisionNodeEvent.NEW_DECISION_NODE, decisionNodeAdded);
    
         .......
    
        private function decisionNodeAdded(event:DecisionNodeEvent):void
        {
    
                trace('the event came to the main Flex app');
        }
    
  4. 我已经过测试,以确保调度事件。确实如此,我可以看到Flex控制台上出现了痕迹。它似乎没有成为事件处理程序。这是非常令人沮丧的:(任何人可以帮助我吗?

3 个答案:

答案 0 :(得分:1)

你在调度事件时没有传递节点(这是自定义事件的整个点,对吧?),我认为它看起来应该更像这样:

 this.dispatchEvent( new DecisionNodeEvent(DecisionNodeEvent.NEW_DECISION_NODE,false,false,this) );

=)

答案 1 :(得分:1)

如果在构造函数中调度该事件(使用new关键字时运行的代码),则在到达下一行并添加事件侦听器时就已经发生了这种情况。

HTH;

艾米

答案 2 :(得分:0)

没有传递节点不是我遇到的问题(我拿出节点传递用于调试目的)。问题是没有事件被发送到监听器的位置,因此处理程序没有被解雇。谢谢你的帮助。

我通过将dispatch事件从构造函数中删除来解决问题。我认为听众不是在调度员广播事件之后(仅仅是一个理论),无论是现在哪种方式都在工作,所以谢谢大家:)