Flex Localization:刷新DataProvider值

时间:2008-12-10 01:16:24

标签: flex localization

我有一个带有DataProvider设置的ToggleButtonBar:

   <mx:ToggleButtonBar itemClick="clickHandler(event);" selectedIndex="0">
    <mx:dataProvider>
        <mx:String>{resourceManager.getString('dashboard','daily')}</mx:String>
        <mx:String>{resourceManager.getString('dashboard','monthly')}</mx:String>
        <mx:String>{resourceManager.getString('dashboard','quarterly')}</mx:String>
        <mx:String>{resourceManager.getString('dashboard','yearly')}</mx:String>
    </mx:dataProvider>
   </mx:ToggleButtonBar>

要将语言环境切换为中文,我有一个带有此处理程序的组合框:

resourceManager.localeChain = "zh_CN";

我的问题是,在区域设置更改时,屏幕上所有其他控件的标签会为新区域设置动态重新加载,dataProvider值不会刷新。 我可以在代码中手动重置它们,但有更清洁的解决方案吗?

4 个答案:

答案 0 :(得分:3)

我会将数据提供程序的数据抽象为可绑定变量,然后在更改本地时重置数据提供程序。

<mx:Script>
    <![CDATA[
        [Bindable]
        myArray:Array = new Array(
              [resourceManager.getString('dashboard','daily')]
            , [resourceManager.getString('dashboard','monthly')]
            , [{resourceManager.getString('dashboard','quarterly')]
            , [resourceManager.getString('dashboard','yearly')]);

    ]]>
</mx:Script>


<mx:ToggleButtonBar itemClick="clickHandler(event);" 
selectedIndex="0" id="myToggleButtonBar" dataprovider="{myArray}" />

然后你可以说

myToggleButtonBar.dataProvider = myArray; 
交换当地人之后

它应该有效。

免责声明,我的代码中可能存在一些小错误,我显然无法测试它,而且我现在还没有可用的flex构建器甚至检查我的语法,所以我希望我没有犯任何拼写错误。但这应该让你进入大球场。

答案 1 :(得分:1)

也许如果你把一个getter绑定到自定义事件ex:“langChange”

[Bindable("langChange")]
public function get dataProviderToggleB():ArrayCollection
{
    var arr :ArrayCollection = new ArrayCollection();

    arr.addItem(resourceManager.getString('dashboard','daily'));
    arr.addItem(resourceManager.getString('dashboard','monthly'));

    return arr; 
}

并在您的“resourceManager.localeChain”设置器中发送:

dispatchEvent(new Event("langChange"));

你可以像这样使用:

<mx:ToggleButtonBar dataProvider="{dataProviderToggleB} itemClick="clickHandler(event);" selectedIndex="0">

我希望这会对你有所帮助。

答案 2 :(得分:1)

你应该在你的数组中保持'daily',...并使用labelFunction来翻译标签。 当resourceManager发送更改事件时,您应该执行combo.labelFunction = labelFunction

答案 3 :(得分:0)

诀窍是在dataProvider数组中的每个元素周围添加括号,这样就可以正确解析它。请注意,这也正确地绑定到flex中的区域设置更改,不需要自定义事件调度。

<mx:ToggleButtonBar itemClick="clickHandler(event);" selectedIndex="0" 
  dataProvider="{[ (resourceManager.getString('dashboard','daily')),
                   (resourceManager.getString('dashboard','monthly')),
                   (resourceManager.getString('dashboard','quarterly')), 
                   (resourceManager.getString('dashboard','yearly')) ]}">
</mx:ToggleButtonBar>