2009-02-23 9 views
0

je crée une liste à deux dimensions qui a des numéros consécutifs à la fin de « jour », pour être utilisé comme fournisseur de données pour une DataGrid je les ai accède via la commande
DG1. selectedItem.day1
dg1.selectedItem.day2
dg1.selectedItem.day3
etc ...Utiliser des chaînes pour accéder à des méthodes personnalisées dynamiquement

est-il possible de prendre la chaîne ("jour" + i) et le convertir en un (ce qui est il? nom de variable?) de sorte que je peux faire quelque chose le long de:

for(var i:Number=1; i<numFields; i++) 
{ 
    dg1.selectedIndex = i-1; 
    dg1.selectedItem.(mysteryFunction("day"+i)) = 42; 
} 

s'il y a une fonction que je pourrais utiliser pour mysteryFunction, ou ce type de données à utiliser, toute information serait très utile


ce que je l'ai utilisé (si fastidieux):

<mx:XMLList id="sched"> 
    <field> 
     <day1></day1> 
     <day2></day2> 
     <day3></day3> 
    </field> 
    <field> 
     <day1></day1> 
     <day2></day2> 
     <day3></day3> 
    </field> 

    ... 
</mx:XMLList> 

Répondre

0

utilisez un Array ou si vous allez lier (que je fais le pari genre de sur) utiliser ArrayCollection au lieu de nommer ces variables individuellement.

Si les membres sont générés par un programme, il est préférable de placer tous ces éléments dans l'une des classes de collection mentionnées ci-dessus, puis de lancer le traitement. Cela rend la vie plus facile à long terme.

E4X est la voie à suivre pour traiter XML. Les gars de Mozilla ont sans doute un meilleur explanation de cette technologie. Donc, si votre XML est stocké dans une variable:

var tree:XML = <field> 
    <day1></day1> 
    <day2></day2> 
    <day3></day3> 

Vous pouvez simplement faire:

tree.day1 = 42; 

Pourquoi voudriez-vous cette mysteryFunction()? Un objet dataProvider est juste une collection de type. Vous connaissez déjà le type, non? Lisez this.

De toute façon, il n'y a pas une telle fonction mystère. Notez cependant que la concaténation de chaînes avec un nombre convertit le nombre en chaîne. Essayez

trace("str " + 42); 
1

La fonction « mystère » que vous cherchez est aussi simple que l'indexation avec des supports:

for(var i:Number=1; i<numFields; i++) 
{ 
    dg1.selectedIndex = i-1; 
    dg1.selectedItem["day"+i] = 42; 
} 

Et il est appelé, de façon surprenante, un attribut.

Questions connexes