Flex:ResourceManager.getInstance()的包装器。不会通知getString localeChain更新

时间:2010-02-16 15:45:20

标签: flex flex3 locale resourcemanager

我编写了一个包含一些最常用函数的实用程序库。 在那里,我有一个ResourceManager.getString的包装器,以简化在非UI类中使用资源管理器:

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时,一切都按预期工作。

由于它只是一个包装器,我可以轻松切换回“长”符号,但我很好奇我将如何实现所需的行为。

2 个答案:

答案 0 :(得分:3)

Unfortunatley,Lance发布的代码不起作用。我有一个更新版本。但是,这不能用于全局公共功能,因为我希望它能够工作。它仍然必须在每个要使用的文件中included。因此,它对swc

并没有用
// ActionScript file
import flash.events.Event;

/**
 * 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();
    resourceManager.addEventListener(Event.CHANGE, function(e:Event):void {
            dispatchEvent(new Event(Event.CHANGE));     
        } 
    );
}

答案 1 :(得分:0)

您只需要绑定到ResourceManager的更改事件,并重新发送它以执行_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());
  • normal:使其像resourceManager.getString()
  • 单身:使其像ResourceManager.getInstance().getString()

希望有所帮助, 兰斯