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





Возможно, если вы сделаете геттер привязанным к настраиваемому событию, например: "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">
Надеюсь, это поможет вам.
Я бы абстрагировал данные для вашего поставщика данных в связываемую переменную, а затем просто сбросил бы поставщик данных, когда вы меняете локальные переменные.
<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;
после того, как вы поменяете местными жителями, и он должен работать.
Заявление об отказе от ответственности, в моем коде могут быть небольшие ошибки, я, очевидно, не могу его протестировать, и у меня сейчас нет доступного гибкого конструктора, чтобы даже проверить мой синтаксис, поэтому я надеюсь, что не сделал никаких орфографических ошибок. Но это должно помочь вам ориентироваться.
Вы должны сохранить «daily», ... в своем массиве и использовать labelFunction для перевода метки. Когда resourceManager отправляет событие изменения, вы должны сделать combo.labelFunction = labelFunction
Хитрость заключается в том, чтобы добавить скобки вокруг каждого элемента в массиве 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>