Flex Localização: atualizar valores DataProvider

votos
4

Eu tenho um ToggleButtonBar com uma configuração DataProvider assim:

   <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>

Para mudar de localidade para chinês, eu tenho uma caixa de combinação com este manipulador:

resourceManager.localeChain = zh_CN;

Meu problema é que a mudança de local, enquanto os rótulos de todos os outros controles na tela recarregar dinamicamente para o novo local, os dataProvidervalores não serão atualizados. I pode redefinir manualmente-los no código, mas há uma solução mais limpa?

Publicado 10/12/2008 em 02:16
fonte usuário
Em outras línguas...                            


4 respostas

votos
3

Eu resumo os dados para o seu provedor de dados em uma variável ligável, em seguida, basta redefinir o provedor de dados quando você alterar locais.

<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}" />

Então você pode apenas dizer

myToggleButtonBar.dataProvider = myArray; 

depois de trocar os locais e ele deve funcionar.

Disclaimer, pode haver alguns erros no meu código, eu obviamente não sou capaz de testá-lo e eu não tenho Flex Builder disponível agora até mesmo verificar o meu sintaxe assim que eu espero que eu não cometer erros de ortografia. Mas isso deverá fazê-lo no estádio.

Respondeu 11/12/2008 em 19:29
fonte usuário

votos
1

Você deve manter 'diária', ... em sua matriz e usar um labelFunction para traduzir o rótulo. Quando o resourceManager envia um evento de mudança que você deve fazer uma combo.labelFunction = labelFunction

Respondeu 09/11/2009 em 16:57
fonte usuário

votos
1

Talvez se você fizer um bindable getter para um evento personalizado para 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; 
}

e em sua setter "resourceManager.localeChain" você despachar:

dispatchEvent(new Event("langChange"));

e você pode usado como este:

<mx:ToggleButtonBar dataProvider="{dataProviderToggleB} itemClick="clickHandler(event);" selectedIndex="0">

Espero que isso iria ajudá-lo.

Respondeu 10/12/2008 em 12:52
fonte usuário

votos
0

O truque é adicionar suportes em torno de cada elemento na matriz dataProvider, dessa forma ele é analisado corretamente. Note que isto também se liga correctamente às alterações de localidade em Flex, não há necessidade de despacho evento personalizado.

<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>
Respondeu 03/02/2012 em 12:38
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more