我在flex 3.5中创建了一个自定义事件。但是不调用处理程序。如何解决这个或者调试这个问题的方法是什么?
Event类:
package com.saneef.worldlanguages.events
{
import flash.events.Event;
public class LanguageEvent extends Event
{
public static const LANGUAGE_SELECTED:String = "LanguageSelected";
public function LanguageEvent(type:String,languageid:String)
{
super(type);
this.langid = languageid;
trace("LanguageEvent: " + this.langid);
}
public var langid:String;
override public function clone():Event {
return new LanguageEvent(type, langid);
}
}
}
调度:
private function functionOne():void
{
try{
dispatchEvent(new LanguageEvent(LanguageEvent.LANGUAGE_SELECTED,"STR"));
}
catch(e:Error)
{
trace(e.message);
}
}
在Main应用程序类中,EventListener:
protected function application1_initializeHandler(event:FlexEvent):void
{
this.addEventListener(LanguageEvent.LANGUAGE_SELECTED,
application1_LanguageSelectionHandler);
}
事件处理函数:
public function application1_LanguageSelectionHandler(event:LanguageEvent):void
{
trace("application1_LanguageSelectionHandler: " + event.langid);
populate_countrya3id_languages(event.langid);
}
答案 0 :(得分:3)
您的代码看起来很好。由于我看不到完整的来源,以下是我对可能发生的事情的两点看法:
在发送活动之前,您确定addEventListener
来电已完成吗?添加一些跟踪以确保在application1_initializeHandler
之前打印functionOne
。
您的functionOne
来电是否与您的主要应用程序不同?如果是这样,您需要在活动的超级通话中将自定义活动的bubbles
属性设置为true。
public function LanguageEvent(type:String,languageid:String,bubbles:Boolean=True)
{
super(type, bubbles);
this.langid = languageid;
trace("LanguageEvent: " + this.langid);
}
有关构造函数调用,请参阅flash.events.Event
文档。另外,这里引用了bubbles
解释here的参数:
bubbles属性
据说一个事件会冒泡 事件对象参与 事件流的冒泡阶段, 这意味着事件对象是 从目标节点返回 通过它的祖先直到它到达 舞台。 Event.bubbles属性 存储一个指示的布尔值 事件对象是否参与 在冒泡阶段。因为全部 泡沫也参与的事件 捕获和目标阶段,任何 泡沫参与所有活动 三个事件流程阶段。如果 值为true,即事件对象 参与所有三个阶段。如果 值为false,即事件对象 不参与冒泡 相。
根据您的源代码,您似乎已经在Flex文档中看到了“调度自定义事件”,但我会链接到它,以便将来/简单参考:http://livedocs.adobe.com/flex/3/html/help.html?content=createevents_3.html。
另外,请查看http://www.adnandoric.com/2008/12/29/understanding-the-flex-event-propagation/,了解事件传播系统的高级概述,以便更好地了解开发过程中发生的情况。
修改强>
根据您的评论我猜测您的functionOne
调用是在一个单独的类中,而您的“主”应用程序有一个此类的实例。如果是这样,您将要在该实例上附加您的事件监听器并将其委托给您的主要application1_LanguageSelectionHandler
函数...就像这样:
protected function application1_initializeHandler(event:FlexEvent):void
{
this.theInstanceThatHoldsYourFunctionOne.addEventListener(LanguageEvent.LANGUAGE_SELECTED,
application1_LanguageSelectionHandler);
}