2010-02-25 4 views
1

je vais avoir quelques problèmes avec AS3chaîne pour le nom d'instance dans le script d'action 3

var eventChildren:XMLList = eventInput.channel.children(); 
var nr:Number; 
nr=0; 
for each (var eventInfo:XML in eventChildren) { 

    nr++; 
    trace(eventInfo.title); 
    var ev="ev"+String(nr); 
    var titl="title"+String(nr); 
    trace(ev); 
    trace(titl); 

    var newEV:Object = Object(ev); 
    var newTITL:Object = Object(titl); 

    trace(newEV); 
    trace(newTITL); 

    newEV.newTITL.text=eventInfo.title; 

} 

} 

ceci est mon code, je suis en train de définir la valeur de titre pour chaque instance enfant de eventChild, comme i Je suis nouveau dans le script d'action en général, et le script d'action 3 en particulier je ne sais pas vraiment ce que je fais mal ici. J'essaye de placer le texte pour ev1.title1, ev2.title2, etc. des valeurs dans eventChildren comme ceci: premier enfant, ensembles ev1.title1, deuxième ev2.title2 et ainsi de suite. Des idées sur ce que je devrais changer dans le code ou où chercher de l'information?

edit: merci pour l'aide, les deux réponses me ont emmené à la bonne solution:

for each (var eventInfo:XML in eventChildren) { 

    nr++; 

    trace(eventInfo.title); 
    var ev="ev"+String(nr); 
    var titl="title"+String(nr); 
    //trace(ev); 
    //trace(titl); 

    var oTitle:Object = {}; // create object for the field titleXX 
    oTitle[titl] = {text:eventInfo.title}; // create and assign the field text to a new object 
    allFields[ev] = oTitle; // assign the title object to the field evXX 

} 

ev1.title1.text=allFields.ev1.title1.text; 
ev2.title2.text=allFields.ev2.title2.text; 
ev3.title3.text = allFields.ev3.title3.text; 
ev4.title4.text=allFields.ev4.title4.text; 

Répondre

2

ev et titl sont Strings et non Object, il n'y a pas eval en AS3 donc vous ne serez pas en mesure pour créer une nouvelle variable basée sur un nom de chaîne vous pouvez créer .Mais une nouvelle Object qui aura un champ en fonction de votre chaîne ev:

var o:Object={}; 
o[ev]="...."; 

donc, si ev i s égal à la chaîne "ev1" vous aurez un objet avec un champ nommé ev1 => o.ev1 = ...

Pour le titre, vous pouvez faire la même chose créer un nouvel objet qui aura un champ basé sur chaîne de titl:

var o:Object={}; 
o[titl]="..."; 

donc, si titl est égale à la chaîne « titre1 » vous aurez un objet avec un champ nommé titre1 => o.title1 = ...

même chose pour le texte devez créer un objet pour contenir le champ de texte.

mélange toutes ces infos vous finissez avec:

var eventChildren:XMLList = eventInput.channel.children(); 
var nr:Number=0; 
var AllFields:Object={}; 

for each (var eventInfo:XML in eventChildren) { 
    nr++; 
    trace(eventInfo.title); 
    var ev="ev"+String(nr); 
    var titl="title"+String(nr); 
    trace(ev); 
    trace(titl); 

    var oTitle:Object = {}; // create object for the field titleXX 
    oTitle[titl] = {text:eventInfo.title}; // create and assign the field text to a new object 
    allFields[ev] = oTitle; // assign the title object to the field evXX 
} 

// then you can have access to all your field within the object allFields 
trace(allFields.ev1.title1.text) 
trace(allFields.ev2.title2.text) 

Voir aussi cette question pour la notation objet

+0

merci, cela m'a beaucoup aidé – Raz

2

Vous pouvez créer le nom de la variable en utilisant 'ceci':

this['mystring'] = new Object(); 
this.mystring.title = 'mytitle'; 

Si vous le faites à l'intérieur d'une classe, la classe doit être dynamique pour permettre de nouveaux membres:

dynamic public class MyClass extends MovieClip { 
    public function MyClass() { 
     this['mystring'] = new Object(); 
     this.mystring.title = 'mytitle'; 
    } 
} 

Si votre classe n'est pas dynamique, vous pouvez toujours le faire, mais vous devez continuer à utiliser la notation de tableau plutôt que la notation par points:

public class MyClass extends MovieClip { // not dynamic 
    public function MyClass() { 
     this['mystring'] = new Object(); 
     this['mystring'].title = 'mytitle'; 
    } 
} 
Questions connexes