【问题标题】:Flex Spark DropDownList selectedItem didn't update after dataProvider changed更改 dataProvider 后 Flex Spark DropDownList selectedItem 未更新
【发布时间】:2010-12-26 19:30:43
【问题描述】:

我有两个 dataProvider 用于一个 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 已更新,但 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 是否有缺陷?

【问题讨论】:

  • 损坏的似乎是 Label 和 list.selectedItem 之间的链接。在你的代码中试试这个,你会看到 selectedItem 设置正确&lt;s:Button id="test" label="TEST" click="Alert.show(list.selectedItem)"/&gt;

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


【解决方案1】:

也许你认为它坏了是对的。我不会对此做出判断。不过,解决您的问题非常简单,更改翻转功能以重置所选索引,从而触发列表上的数据更改,并最终绑定到您的组件:

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

【讨论】:

    猜你喜欢
    • 2012-11-30
    • 1970-01-01
    • 2017-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多