Flex Spark DropDownList selectedItem не обновлялся после изменения dataProvider - PullRequest
2 голосов
/ 26 декабря 2010

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

<?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 обновлен, но выбранный индекс такой же. При запуске: [listSelectedItem = Flex, listSelectedIndex = 1]. Нажмите Flip: dataProvider обновляется, но все еще [listSelectedItem = Flex, listSelectedIndex = 1].

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

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

1 Ответ

2 голосов
/ 28 декабря 2010

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

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