Flex Localization: обновить значения DataProvider - PullRequest
4 голосов
/ 10 декабря 2008

У меня есть ToggleButtonBar с настройкой 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 не обновляются. Я могу вручную сбросить их в коде, но есть ли более чистое решение?

Ответы [ 4 ]

3 голосов
/ 11 декабря 2008

Я бы абстрагировал данные для вашего провайдера данных в привязываемую переменную, а затем просто сбросил бы провайдера данных, когда вы меняете локальные данные.

<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 голос
/ 09 ноября 2009

Вы должны хранить 'daily', ... в вашем массиве и использовать функцию labelFunction для перевода метки. Когда resourceManager отправляет событие изменения, вы должны сделать combo.labelFunction = labelFunction

1 голос
/ 10 декабря 2008

Может быть, если вы сделаете геттер привязываемым к пользовательскому событию, например: "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">

Надеюсь, это поможет вам.

0 голосов
/ 03 февраля 2012

Хитрость заключается в добавлении скобок вокруг каждого элемента в массиве 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...