Forums Développement Multimédia

Aller au contenu

Unable to apply a sort to ArrayCollection

CODE Actionscript

7 réponses à ce sujet

#1 youtch77

    Ceinture Verte

  • Members
  • PipPipPipPip
  • 51 messages

Posté 21 August 2013 - 08:36 AM

I want to display datas on List, not in DataGrid (I'm developing a mobile application). Regulary the user of application must modify some TextInput content and so their text contents will be added on the List, so I'd like to apply a new sort with alphabetic order, with unsensitive case :

protected function view_preinitialize(event:Event):void
{      

        sortAcData = new Sort;
        import spark.collections.Sort;
        import spark.collections.SortField;

        sortAcData.fields = [new spark.collections.SortField("job", true, false)];

        acData = new ArrayCollection;
        acData = myHonorairesConfig.getTypesPeople("job");
        acData.sort = sortAcData;
}
When I modified an arrayCollection variable, I have to update it with refresh() : it works there is two bad things : The order is bad because it's the reverse alphabetic order, moreover the new added element is added as last of the list !
To modify the arrayCollection I use this code :

acDataAddItem({
        "id": id,
        "libelle": tiLibelleAjout.text,
        "montant": tiMontantAjout.text
});
acData.refresh();


#2 Benzouye

  • Members
  • PipPipPipPipPipPipPipPip
  • 583 messages

Posté 21 August 2013 - 11:20 AM

Bonjour youtch,

Je ne maîtrise pas les composants Flex, mais pour ajouter un item dans ton ArrayCollection tu utilises les noms de champ "id", "libelle" et "montant", par contre pour trier les items (sort), tu passes le paramètres name = "job" à ton objet SortField ...
Je ne suis pas sûr de moi, mais n'essaye-t-il pas de trier sur le champ "job" qui n'existe pas donc ne réalise pas le tri ?
Benzouye
Travaille avec FlashDevelop 4 + Flex SDK 4.6 open source

#3 Benzouye

  • Members
  • PipPipPipPipPipPipPipPip
  • 583 messages

Posté 21 August 2013 - 12:59 PM

Ensuite, pour le tri décroissant, c'est une erreur de ta part, voilà la signature du constructeur de SortField :
public function SortField(name:String = null, descending:Boolean = false, numeric:Object = null)
Tu passes le paramètres descending à true ... donc le tri est décroissant ... il te suffit de faire :
sortAcData.fields = [new spark.collections.SortField("job")];

Benzouye
Travaille avec FlashDevelop 4 + Flex SDK 4.6 open source

#4 youtch77

    Ceinture Verte

  • Members
  • PipPipPipPip
  • 51 messages

Posté 21 August 2013 - 14:55 PM

Voir le messageBenzouye, le 21 August 2013 - 12:59 PM, dit :

Ensuite, pour le tri décroissant, c'est une erreur de ta part, voilà la signature du constructeur de SortField :
public function SortField(name:String = null, descending:Boolean = false, numeric:Object = null)
Tu passes le paramètres descending à true ... donc le tri est décroissant ... il te suffit de faire :
sortAcData.fields = [new spark.collections.SortField("job")];

Houps j'ai inversé involontairement le sens alphabétique, cependant ce n'est pas meilleur si j'ai un ou trois argument... j'ai un doute sur un point : est ce que le tri peux s'inverser de nouveau si je l'applique deux fois , sur le même objet ?

#5 Benzouye

  • Members
  • PipPipPipPipPipPipPipPip
  • 583 messages

Posté 21 August 2013 - 15:29 PM

Chaque fois que tu lances ArrayCollection.refresh(), le tri imposé par SortField est fait.
Si tu appliques plusieurs fois un tri avec descending = true, cela sera quand même un tri décroissant ...
Pour changer l'ordre de tri il faut modifier ton objet SortField et relancer le refresh ...

Sinon cela fonctionne sur le reste ?
Benzouye
Travaille avec FlashDevelop 4 + Flex SDK 4.6 open source

#6 youtch77

    Ceinture Verte

  • Members
  • PipPipPipPip
  • 51 messages

Posté 22 August 2013 - 10:21 AM

J'ai situé le problème, pas sa source : J'ai utilisé trace() pour voir le contenu de acDatas, c'est incroyable les métiers sont dans le bon ordre ! C'est dans la liste qu'est situé le blocage car le tri n'est pas exécuté. Pourtant acDatas est associé à la liste (mot cle Bindable) pour la mise à jour automatique Image IPB ! Voici le code de la liste :


<s:List id="listModifierElements" width="90%" horizontalCenter="0"
                        dataProvider="{acData}" horizontalScrollPolicy="auto"
                        itemRenderer="views.irListEditerJob"
>
</s:List>

... et de irListJob :


<s:VGroup width="100%" gap="2" paddingTop="10" paddingBottom="10">
    <s:TextInput id="tiJob" text="{if(data.job!=null) data.job}"/>
    <s:HGroup gap="2" width="100%" horizontalAlign="left">
        <s:TextInput id="tiSalary" text="{if(data.salary!=null) data.salary}"/>
        <s:Label id="lbSymbCurrency" text="€"/>
    </s:HGroup>
    <s:HGroup id="hgElementListeLigne2" gap="2" width="100%" horizontalAlign="left">
        <s:Button id="btnEdit" click="onEdit(event)" icon="@Embed(source='/assets/img/icon_edit.png')"/>
        <s:Button id="btnDelete" click="onDelete(event)" icon="@Embed(source='/assets/img/icon_delete.png')"/>
    </s:HGroup>
</s:VGroup>
 

Et pour acData je l'ajoute bien avec acData.addItem("job":valeur,"salary":valeur), mais si le tri fonctionne avec arrayCollection cela n'élimine pas l'erreur dans la liste...

#7 alon

    Ceinture Blanche

  • Members
  • Pip
  • 1 messages

Posté 22 August 2013 - 10:26 AM

I am not getting your words!!

#8 youtch77

    Ceinture Verte

  • Members
  • PipPipPipPip
  • 51 messages

Posté 23 August 2013 - 08:46 AM

J'ai fait le jour sur ce qui bloquais mon tri de liste ! Je laisser s'exécuter une fonction dans mon projet, qui lançait en double la modification de acData et aussi qui lançait une nouvelle requête SQL sans option de tri pertinent. Toutes mes excuses !



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)