1

我正在使用带有 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:我只是尝试替换EventHandlerMediate但出现同样的问题。


编辑 2:这是 Swiz 网页上的相关文档


编辑 3:我也尝试将事件放在引号中(感谢@Gerhard's),如下所示:

[EventHandler( event="ConfigConstants.LOCALE_RESOURSE_LOADED")]
public function onLocaleResourseLoaded( ...rest):void
{
    this.label = Locale.getUiString("title.map.broadcast");
}

但该事件仍未收到。我认为问题可能出在我初始化 Swiz 的主 mxml 文件中:

<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

另请注意

  • AcordianPanecom.sixtyfootersdude.views
  • Localecom.foxtrot.util
  • ConfigConstantscom.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 ] }" />
4

1 回答 1

1

您不能在元标记中使用常量。不幸的是,这是 Flex 的限制。相反,您必须使用常量的名称作为字符串。但是,Swiz 会在初始化时检查这些常量是否存在。因此,如果您错误配置了[EventHandler].

因此,在您的情况下,解决方案将如下所示:

[EventHandler(event = "ConfigConstants.LOCALE_RESOURSE_LOADED")]
public function onLocaleResourseLoaded():void
{
}

确保包的ConfigConstants配置与eventPackage您的 SwizConfig.

有关更多信息,请查看使用类和常量名称的事件处理Swiz 配置

顺便说一句:您不应该再使用已弃用[Mediate]的。

于 2011-09-19T18:57:24.977 回答