4

我有一个带有 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

4 回答 4

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

于 2008-12-11T18:29:20.853 回答
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">

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

于 2008-12-10T11:52:42.590 回答
1

您应该在数组中保留 'daily', ... 并使用 labelFunction 来翻译标签。当资源管理器发送更改事件时,您应该执行 combo.labelFunction = labelFunction

于 2009-11-09T15:57:55.383 回答
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>
于 2012-02-03T11:38:50.353 回答