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 : で置き換えEventHandlerてみましMediateたが、同じ問題が発生します。


編集 2 : これは、Swiz Web ページの関連ドキュメントです。


編集3:イベントを次のように引用してみました(@Gerhardに感謝します):

[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

また、

  • 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 ] }" />
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 に答える