2008-12-10 37 views
4

我有一个DataProvider中设置这样一个ToggleButtonBar:Flex的本地化:刷新的DataProvider值

<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值不会刷新。 我可以在代码中手动重置它们,但是有更清晰的解决方案吗?

回答

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 builder甚至检查我的语法,所以我希望我没有做任何拼写错误。但是这应该让你进入球场。

1

也许如果你让一个getter绑定到为前一个自定义事件: “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"> 

我希望这会对你有帮助。

1

您应该在数组中保留“每日”...,并使用labelFunction来转换标签。 当resourceManager发送更改事件时,您应该执行combo.labelFunction = labelFunction

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>