2008-12-10 36 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>