2010-12-26 3 views
2

У меня есть два dataProvider для одного DropDownList. Следующий код может быть скомпилирован и запущен.Flex Spark DropDownList selectedItem не обновлялся после изменения dataProvider

<?xml version="1.0" encoding="utf-8"?> 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:mx="library://ns.adobe.com/flex/mx" 
    creationComplete="flipLast()" 
    minWidth="955" minHeight="600"> 
<fx:Script> 
<![CDATA[ 
    import mx.collections.ArrayCollection; 
    public function flipLast():void { 
      if(last) { 
       list.dataProvider = dp1; 
       list.selectedItem = "Flex"; 
      } else { 
       list.dataProvider = dp2; 
       list.selectedItem = "Catalyst";   
      } 
      last = !last; 
    } 

    public var last:Boolean = true; 
    public var dp1:ArrayCollection = new ArrayCollection([ "Flex", "Air" ]); 
    public var dp2:ArrayCollection = new ArrayCollection([ "Catalyst", "FlashBuilder" ]); 
]]> 
</fx:Script> 

<s:VGroup> 
    <s:DropDownList id="list" requireSelection="true" /> 

    <s:Label id="listSelectedItem" text="{list.selectedItem}" /> 
    <s:Label id="listSelectedIndex" text="{list.selectedIndex}" /> 

    <s:Button label="Flip" click="flipLast()" /> 
</s:VGroup> 
</s:Application> 

Сценарий 1: dataProvider обновлен, но selectedIndex - это то же самое. При запуске: [listSelectedItem = Flex, listSelectedIndex = 1]. Нажмите Flip: dataProvider обновлен, но все еще [listSelectedItem = Flex, listSelectedIndex = 1].

Сценарий 2: обновлен dataProvider, selectedIndex также обновлен. При запуске: [listSelectedItem = Flex, listSelectedIndex = 1]. Выберите «Воздух» из списка: [listSelectedItem = Air, listSelectedIndex = 2]. Нажмите «Отразить»: обновлен dataProvider, но все еще [listSelectedItem = Catalyst, listSelectedIndex = 1].

Кажется, что selectedItem управляется selectIndex. selectedItem обновляется только после того, как selectedIndex обновляется. Не следует ли обновлять данные при обновлении dataProvider? Является ли привязка к selectedItem ошибочной?

+0

, что сломано, кажется, быть связующим звеном между Ярлык и список.selectedItem. Попробуйте это в своем коде, вы увидите, что selectedItem правильно установлен '' –

ответ

2

Возможно, вы правы в том, что оно сломано. Я не буду судить об этом. Исправление вашей проблемы довольно просто, хотя, изменить функцию флипа сбросить выбранный индекс, тем самым вызывая данные-изменения в списке, и в конечном счете обязательными компонентов:

public function flipLast():void { 
      list.selectedIndex = -1; 
      if(last) { 
       list.dataProvider = dp1; 
       list.selectedItem = "Flex"; 
      } else { 
       list.dataProvider = dp2; 
       list.selectedItem = "Catalyst";   
      } 
      last = !last; 
    }