Question

J'ai deux dataProvider est pour un DropDownList. Le code suivant peut être compilé et exécuté.

<?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>

Scénario 1: mise à jour dataProvider, mais selectedIndex est le même. Au démarrage: [listSelectedItem = Flex, listSelectedIndex = 1]. Cliquez sur Retourner:. DataProvider est mis à jour, mais toujours [listSelectedItem = Flex, listSelectedIndex = 1]

Scénario 2: mise à jour dataProvider, selectedIndex est également mis à jour. Au démarrage: [listSelectedItem = Flex, listSelectedIndex = 1]. Sélectionnez Air de la liste: [listSelectedItem = Air, listSelectedIndex = 2]. Cliquez sur Retourner:. DataProvider est mis à jour, mais toujours [listSelectedItem = catalyseur, listSelectedIndex = 1]

me semble que selectedItem est entraîné par selectedIndex. selectedItem met à jour uniquement lorsque les mises à jour selectedIndex. Ne devrait pas être mis à jour lorsque selectedItem dataProvider est mis à jour? Est la liaison à selectedItem imparfaite?

Était-ce utile?

La solution

Peut-être que vous avez raison en supposant qu'il est cassé .. Je ne vais pas juger sur ce point. Le correctif pour votre problème est assez simple cependant, changer la fonction bascule pour réinitialiser l'index sélectionné, déclenchant ainsi des données de changement sur la liste, et éventuellement lier vos composants:

public function flipLast():void {
          list.selectedIndex = -1;
          if( last ) {
               list.dataProvider = dp1;
               list.selectedItem = "Flex";
          } else {
               list.dataProvider = dp2;
               list.selectedItem = "Catalyst";        
          }
          last = !last;
     }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top