Pourquoi est-Flex de type arraycollection Contiennent méthode d'oeil à la mémoire de référence?
Lors de l'utilisation de .contains()
sur un ArrayCollection
dans Flex, il va toujours chercher à la mémoire de référence. Il ne semble pas regarder un .equals()
méthode ou .toString()
méthode ou quoi que ce soit substituables. Au lieu de cela, j'ai besoin d'une boucle sur le ArrayCollection
à chaque fois et de vérifier chaque élément jusqu'à ce que je trouve ce que je cherche.
Personne ne sait pourquoi Flex/ActionScript a été faite de cette façon? Pourquoi ne pas fournir un moyen de les gens à utiliser le contains()
méthode de la façon dont ils veulent?
Je partage votre douleur, je suis constamment en souhaitant que le Flex a une égale/getHashCode modèle intégré.
OriginalL'auteur DyreSchlock | 2008-12-23
Vous devez vous connecter pour publier un commentaire.
Ne pouvais pas vous venez de prolonger de type arraycollection et de redéfinir la méthode contains ()? Sinon, vous pouvez coller la source de type arraycollection dans un "mx/collections" package dans votre projet et de modifier la source; ce "singe de correction technique" va remplacer le comportement tout au long de votre projet. Cependant, je serais très prudent sur l'évolution de type arraycollection de cette manière: car il est utilisé partout dans le Flex Api, il ya une bonne chance que vous allez commencer à briser les autres composantes du cadre.
OriginalL'auteur cliff.meyers
La méthode contains() recherche par référence, pour les corriger (je crois que même pour les primitives), donc si vous êtes essayant de trouver une chaîne ou un int dans un type arraycollection, vous aurez à faire la recherche vous-même, par une certaine variation de la boucle ou de la recherche. Je ne pense pas que l'un de nous pourrait vous dire pourquoi il n'y a pas, disons, un paramètre facultatif sur la méthode indiquant si la recherche par ref ou par val, bien; donc, il va, comme ils disent.
Mais je serais certainement vous avertir hors singe-patcher le code de la structure -- c'est juste des ennuis. 🙂
OriginalL'auteur Christian Nunciato
Bien, il semble que le type arraycollection n'a pas fait de regarder directement dans la mémoire, mais seulement comme un dernier recours. Il va tenter de trouver un IDENTIFIANT Unique (UID) de l'objet. Si le liquide n'existe pas, il va en créer un à l'aide de la UIDUtil.comme l'.
Vous pouvez obtenir autour de cet ensemble par défaut UID choses en ayant votre objet de mettre en œuvre l'IUID de l'interface et de fournir votre propre UID de l'objet. Le type arraycollection va regarder l'UID vous les fournir.
-1: Juste essayé le projet de l'utilisation de l'IUID de l'interface, mais la mise en œuvre des méthodes jamais appelé... malheureusement... Ce serait une fonctionnalité intéressante.
OriginalL'auteur DyreSchlock
Je vous suggère un simple:
OriginalL'auteur Zjoia