【问题标题】:How to bind a variable to ResourceManager.getString() in Flex using AS3如何使用 AS3 将变量绑定到 Flex 中的 ResourceManager.getString()
【发布时间】:2014-03-06 09:51:37
【问题描述】:

那天我试图找到一种将变量绑定到本地化资源的方法,但我真的没有任何结果。

情况如下: 我有一个类 ComponentTypes.as,它包含一些字符串类型的公共变量。 我希望将这些变量绑定到已翻译的资源:

package Model
{
    import mx.resources.IResourceManager;
    import mx.resources.ResourceManager;

    public class ComponentTypes
    {
        private static var resourceManagerInstance:IResourceManager = ResourceManager.getInstance();

        //Areas and Volumes
        [Bindable]
        public static var HEATED_AREA:String = resourceManagerInstance.getString('app','phpx.componenttypes.heatedareas');
        [Bindable]
        public static var HEATED_VOLUME:String = resourceManagerInstance.getString('app','phpx.componenttypes.heatedvolumes');
    }
}

但是,当区域设置更改时,这些变量不会更新。这很清楚,因为它们目前不受约束。

所以我的问题是:有没有办法可以将这些变量绑定到 ResourceManager 类,以便在更改语言环境时更新它们?

【问题讨论】:

  • 看看IResourceManager.update();可能是您正在寻找的。​​span>
  • 不,它不起作用。文档说:“这会导致绑定表达式重新评估......”,但是我没有绑定表达式。这正是我的问题 - 如何将变量绑定到资源管理器。

标签: actionscript-3 apache-flex localization air desktop-application


【解决方案1】:

使用object = value 表示法设置对象只运行一次,当执行到达代码中的那个点时。如果static 变量发生在第一次调用变量时(我可能错了,可能是第一次调用或导入类,但这里的最终结果是相同的)。

所以你不能那样绑定。绑定的工作方式是当一个Bindable 变量被物理设置时,它调度一个绑定到它的对象正在侦听的事件。你在那里所做的只是设置变量一次,然后再也不碰它。

您可以通过以下两种方式之一进行绑定:

  1. 在 MXML 中使用 {{ property }} 表示法
  2. 在 AS3 中使用 BindingUtilsBindingUtils 附加一个内部事件侦听器(即您不必自己附加它)并更新提供的属性。不过,我不确定它是否适用于 static 对象。

我确实检查了mx.resources.IResourceManager#getString() 的源代码,并确认它是一个可绑定对象,所以你很好。

【讨论】:

  • 我完全理解为什么我不能用 object=value 表示法绑定。你的解释很棒!我也了解如何使用 MXML 绑定它,但这不是我需要的。问题是我无法使用 BindingUtils 实现绑定。你能帮我一个代码示例吗?我将不胜感激!
【解决方案2】:

这就是我的工作方式:

private function getResource(host:IResourceManager):String
{
    var result:String = '';

    result = host.getString('text', 'test');

    return result;
}

protected function windowedapplication1_initializeHandler(event:FlexEvent):void
{
    BindingUtils.bindProperty(this,'bindedVariable', resourceManager, {name:'getString', getter:getResource});
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-05
    • 1970-01-01
    • 2012-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多