我编写了一个包含一些最常用函数的实用程序库。 在那里,我有一个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
时,一切都按预期工作。
由于它只是一个包装器,我可以轻松切换回“长”符号,但我很好奇我将如何实现所需的行为。
答案 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()
); resourceManager.getString()
ResourceManager.getInstance().getString()
希望有所帮助, 兰斯