我正在尝试使用flash制作的对象将事件发送到我的flex应用程序。
以下是该方案:
我制作了自定义活动:
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);
}
然后我从我的自定义对象(Movieclip)发送它:
var event:DecisionNodeEvent = new DecisionNodeEvent(DecisionNodeEvent.NEW_DECISION_NODE);
dispatchEvent(event);
最后,我在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');
}
我已经过测试,以确保调度事件。确实如此,我可以看到Flex控制台上出现了痕迹。它似乎没有成为事件处理程序。这是非常令人沮丧的:(任何人可以帮助我吗?
答案 0 :(得分:1)
你在调度事件时没有传递节点(这是自定义事件的整个点,对吧?),我认为它看起来应该更像这样:
this.dispatchEvent( new DecisionNodeEvent(DecisionNodeEvent.NEW_DECISION_NODE,false,false,this) );
=)
答案 1 :(得分:1)
如果在构造函数中调度该事件(使用new关键字时运行的代码),则在到达下一行并添加事件侦听器时就已经发生了这种情况。
HTH;
艾米
答案 2 :(得分:0)
没有传递节点不是我遇到的问题(我拿出节点传递用于调试目的)。问题是没有事件被发送到监听器的位置,因此处理程序没有被解雇。谢谢你的帮助。
我通过将dispatch事件从构造函数中删除来解决问题。我认为听众不是在调度员广播事件之后(仅仅是一个理论),无论是现在哪种方式都在工作,所以谢谢大家:)