2

我编写了一个实用程序库,其中包含一些我最常用的功能。我有一个 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一切都按预期工作。

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

4

2 回答 2

3

不幸的是,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));     
        } 
    );
}
于 2010-02-17T11:56:45.940 回答
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());
  • 正常:让它像resourceManager.getString()
  • 单身:让它喜欢ResourceManager.getInstance().getString()

希望有帮助,兰斯

于 2010-02-16T21:19:37.453 回答