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; 

ローカルを交換すると、動作するはずです。

免責事項、コードに小さなエラーがある可能性があります。明らかにテストできません。また、構文をチェックするためのフレックスビルダーも現在利用できないため、スペルミスがないことを願っています. しかし、これで球場に入るはずです。

于 2008-12-11T18:29:20.853 に答える
1

'daily'、...を配列に保持し、labelFunctionを使用してラベルを変換する必要があります。resourceManagerが変更イベントを送信するときは、combo.labelFunction=labelFunctionを実行する必要があります

于 2009-11-09T15:57:55.383 に答える
1

たぶん、たとえば「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 に答える
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 に答える