2

最もよく使用する関数のいくつかを含むユーティリティ ライブラリを作成しました。非 UI クラスでのリソース マネージャーの使用を簡素化する ResourceManager.getString のラッパーがあります。

package
{
    import mx.resources.ResourceManager;
    /**
     * Convenience function to return a localized string
     * */
    [Bindable("change")]
    public function _s(bundle:String, resourceName:String):String
    {
        return (ResourceManager.getInstance().getString(bundle, resourceName));
    }
}

問題は、localeChain が変更されたときに関数が呼び出されないことですが、呼び出すとresourceManager.getStringすべてが期待どおりに機能します。

これはただのラッパーなので、簡単に「長い」表記に戻すことができますが、どうすれば目的の動作を実現できるのか興味があります。

4

2 に答える 2

0

ResourceManager の change イベントにバインドし、それを再ディスパッチして のバインドを実行するだけです_s。このようなもの:

import flash.events.Event;

import mx.binding.utils.BindingUtils;
import mx.resources.IResourceManager;
import mx.resources.ResourceManager;

/**
 * Convenience function to return a localized string
 * */
[Bindable("change")]
public function _s(bundle:String, resourceName:String):String
{
    return (resourceManager.getString(bundle, resourceName));
}

override protected function createChildren():void
{
    super.createChildren();
    BindingUtils.bindSetter(dispatchChange, resourceManager, "change");
}

private function dispatchChange(event:Event):void
{
    dispatchEvent(new Event("change"));
}

これは単なるインクルード スクリプトのサンプル ( include "resource_wrapper.as") です。そのままでは機能しないはずですが、変更することはできます。

唯一の問題includeは、多くのファイルに手動で含める必要があることです。しかし、それが「ドット」の深さにする唯一の方法です。

  • include: getString()(または_s()) のようにします。
  • 通常: のようにしますresourceManager.getString()
  • singleton: のようにしますResourceManager.getInstance().getString()

お役に立てば幸いです、ランス

于 2010-02-16T21:19:37.453 に答える