PDA

Volledige versie bekijken : this["item"+i]


behived
%Europe/Berlin %717 %2007, 17:12
Ik heb een knop in flex 2. Elke keer als er op de knop gedrukt wordt wil ik een nieuw Textarea aanmaken. Hiervoor heb ik een functie geschreven:

public function createit(e:Event):void{
var test2:TextArea=new TextArea;
this.previewPanel.addChild(test2);
test2.x=50;
this.i++;

}

de i var wordt buiten de functie aangemaakt.
Nu wil ik die test2 kunnen vervangen door iets als this["test"+i] zodat ik zoveel tekstvlakken kan aanmaken als ik wil, maar dit werkt niet en ik weet niet hoe het dan wel zou kunnen.

TheDutch
%Europe/Berlin %828 %2007, 19:53
Klopt! Maar met een beetje creatief denken kom je een heel eind :D.

Maak een private property aan die een Object bevat. Gebruik nu this.jouwObjectProperty["test"+i] in plaats van this["test"+i].

Het kan allemaal zo simpel zijn, haha.

behived
%Europe/Berlin %438 %2007, 10:30
ik heb mij al suf gegoogled maar ik begrijp er niks van...

TheDutch
%Europe/Berlin %510 %2007, 12:15
Wat is het dat je niet begrijpt aan mijn uitleg?

behived
%Europe/Berlin %519 %2007, 12:27
- Hoe en waar ik die private property moet aanmaken
- Hoe ik daar een object moet instoppen
- Hoe ik dat dan moet combineren met mijn new TextArea code...

Ik ga echt dringend enkele goede boeken moeten aanschaffen, want ik vind echt geen goede tutorials op het net...

TrueChaoZ
%Europe/Berlin %524 %2007, 12:35
Waarom niet gewoon?
public function createTextArea(fieldId:String):void
{
var text:TextArea=new TextArea();
this.previewPanel.addChild(text);
text.id = fieldId;
text.x = 50;
}

TheDutch
%Europe/Berlin %525 %2007, 12:36
Zo zou het moeten worden (let op de comments!):

// We declareren de property met als type Object.
private var dynCompObj:Object;
private var i:int;

// Initialize method
private function init():void
{
// We voegen een nieuwe instantie van Object toe aan de property.
this.dynCompObj = new Object();
this.i = 1;
}

public function createit(e:Event):void
{
// We maken binnen het Object een dynamische variable aan met een TextArea instantie.
this.dynCompObj["test"+this.i] = new TextArea();

// We voegen de instantie van TextArea via de variable in het Object toe aan het Panel.
this.previewPanel.addChild(this.dynCompObj["test"+this.i]);

this.dynCompObj["test"+this.i].x=50;
this.i++;
}

Begrijp je nu wat ik je probeerde uit te leggen? :)

TheDutch
%Europe/Berlin %526 %2007, 12:37
Waarom niet gewoon?
public function createTextArea(fieldId:String):void
{
var text:TextArea=new TextArea();
this.previewPanel.addChild(text);
text.id = fieldId;
text.x = 50;
}
Omdat je dan je referentiepunt/instantienaam van het TextArea in het Panel kwijt bent nadat de functie createTextArea() klaar is met zijn acties :).

TrueChaoZ
%Europe/Berlin %526 %2007, 12:37
Ja dat is waar, dat kan ook natuurlijk :P

behived
%Europe/Berlin %575 %2007, 13:48
ok, ik heb het werkend gekregen... En ik begrijp - denk ik toch - zelfs de logica die erachter zit...

Ik denk wel dat ik u ondertussen al een paar pinten verschuldigd ben...

Ik ga weer verder prutsen...

TheDutch
%Europe/Berlin %582 %2007, 13:58
Heel goed! Succes :).