我正在使用Flex的Swiz框架。我试图使用mediate
标签运气好我的问题是:
public class Locale {
private static function onLoadSuccess(event:Event):void
{
// I have a break point here. I can tell that this code is being executed sucessfully
Swiz.dispatchEvent(new DynamicEvent(ConfigConstants.LOCALE_RESOURSE_LOADED));
}
}
在另一个课程中,我在这里有这段代码:
public class AcordianPane {
...
[Mediate( event="localeResourseLoaded")]
public function onLocaleResourseLoaded( ...rest):void
{
this.label = Locale.getUiString("title.map.broadcast");
}
...
}
上面的代码按预期工作。当我将Mediate
标记更改为常量时,我遇到了问题:
public class AcordianPane {
...
[Mediate( event=ConfigConstants.LOCALE_RESOURSE_LOADED)]
public function onLocaleResourseLoaded( ...rest):void
{
// THIS IS NOT EXECUTED NOW!
this.label = Locale.getUiString("title.map.broadcast");
}
...
}
任何人都知道为什么会这样吗?作为参考,这是我的ConfigConstants类:
public class ConfigConstants {
public static const LOCALE_RESOURSE_LOADED:String = "localeResourseLoaded";
}
注意:Mediate标记与EventListener标记完全相同,该名称刚刚更改了几个名称。我知道它现在已经折旧但我认为没有任何理由在我们的代码库中进行查找和替换。
修改1 :我刚尝试用EventHandler
代替Mediate
,但同样的问题就出现了。
修改2 :以下是Swiz网页上的relevant documentation。
编辑3 :我也尝试过将这个事件放在引号中(感谢@ Gerhard's):
[EventHandler( event="ConfigConstants.LOCALE_RESOURSE_LOADED")]
public function onLocaleResourseLoaded( ...rest):void
{
this.label = Locale.getUiString("title.map.broadcast");
}
但事件仍未收到。我认为问题可能出在我的主要mxml文件中,我初始化Swiz:
<swiz:SwizConfig
strict="true" // set by a co-worker
mediateBubbledEvents="true" // set by a co-worker
viewPackages="com.sixtyfootersdude.views" // set by a co-worker
eventPackages="com.sixtyfootersdude.model" // <-- Just added!
beanLoaders="{ [ com.sixtyfootersdude.admin.AdminBeans ] }" /> // set by a co-worker
另请注意
AcordianPane
位于com.sixtyfootersdude.views
Locale
位于com.foxtrot.util
ConfigConstants
位于com.sixtyfootersdude.model
编辑4 :我尝试过的最后一件事是:
[EventHandler( event="com.sixtyfootersdude.model.ConfigConstants.LOCALE_RESOURSE_LOADED")]
public function onLocaleResourseLoaded( ...rest):void{
this.label = Locale.getUiString("title.map.broadcast");
}
和
<swiz:SwizConfig
strict="true"
mediateBubbledEvents="true"
viewPackages="com.sixtyfootersdude.views"
beanLoaders="{ [ com.sixtyfootersdude.admin.AdminBeans ] }" />
答案 0 :(得分:1)
您不能在元标记中使用常量。不幸的是,这是对Flex的限制。相反,你必须使用常量的名称作为字符串。但是,Swiz会在初始化时检查这些常量是否存在。因此,如果您错误配置了[EventHandler]
,那么在应用程序启动期间您将收到错误。
因此,在您的情况下,解决方案将如下所示:
[EventHandler(event = "ConfigConstants.LOCALE_RESOURSE_LOADED")]
public function onLocaleResourseLoaded():void
{
}
确保ConfigConstants
中的eventPackage
包已配置为SwizConfig
。
有关详细信息,请查看Event Handling Using Class and Constant Names和Swiz Configuration。
BTW:您不应再使用已弃用的[Mediate]
。