在dataProvider更改后,Flex Spark DropDownList selectedItem未更新

时间:2010-12-26 19:30:43

标签: flex drop-down-menu flex4 flex-spark

我有一个DropDownList的两个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]。 单击翻转:dataProvider已更新,但仍[listSelectedItem = Flex,listSelectedIndex = 1]。

场景2:dataProvider已更新,selectedIndex也已更新。 在启动时:[listSelectedItem = Flex,listSelectedIndex = 1]。 从列表中选择Air:[listSelectedItem = Air,listSelectedIndex = 2]。 单击翻转:dataProvider已更新,但仍[listSelectedItem = Catalyst,listSelectedIndex = 1]。

在我看来,selectedItem是由selectedIndex驱动的。 selectedItem仅在selectedIndex更新时更新。当dataProvider更新时,不应该更新selectedItem吗?是否绑定到selectedItem有缺陷?

1 个答案:

答案 0 :(得分: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;
     }