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