Volledige versie bekijken : dynamic variable
icegodd
%Europe/Berlin %500 %2008, 12:01
ik heb een probleem met as3 dynamic variable.
van google heb ik dit gevonden en het werkt.
var b=1;
var pippo1=10;
trace(this["pippo"+b]); // 10
maar ik krijg het niet voor elkaar in deze code
function get_menu():void {
.........
varLoader_get_menu.addEventListener(Event.COMPLETE , completeHandler);
function completeHandler(event:Event):void {
var testVar0:String="null";
var testVar1:String="test1";
var testVar2:String="test2";
if (testVar0==null) {
var x:Number=2;
for (var i:Number = 1; i<=x; i++) {
trace(this["testVar"+i]);// undefined
trace(testVar1);// test1
var b=1;
var pippo1 = 10;
trace(this["pippo"+b]); // undefined
}
} else {
}
}
}
bij trace(this["testVar"+i]); en trace(this["pippo"+b]); krijg ik undefined.
ik heb gezocht in google en kon geen oplossing vinden.
probleem ligt denk ik met this[].
alvast THX
Dauntless
%Europe/Berlin %503 %2008, 12:05
Maak er alleszinds eerst dit van:
function get_menu():void {
.........
varLoader_get_menu.addEventListener(Event.COMPLETE , completeHandler);
}
function completeHandler(event:Event):void {
var testVar0:String="null";
var testVar1:String="test1";
var testVar2:String="test2";
if (testVar0==null) {
var x:Number=2;
for (var i:Number = 1; i<=x; i++) {
trace(this["testVar"+i]);// undefined
trace(testVar1);// test1
var b=1;
var pippo1 = 10;
trace(this["pippo"+b]); // undefined
}
} else {
}
}
Zijn de traces van 'this' hetzelfde ?
Wubinator
%Europe/Berlin %504 %2008, 12:05
Volgens mij komt het omdat this wijst naar get_menu en niet naar je completeHandler. En in get_menu komt die variabele niet voor (niet defined)
jaspermuts
%Europe/Berlin %523 %2008, 12:34
In AS3 verwijst 'this' altijd naar waar de functie is geschreven, niet door welk object het wordt aangeroepen. Dit was in AS2 idd anders, maar doe maar eens trace(this) in beide functies, je zult zien dat ze hetzelfde zijn.....denk ik..Daar is trace() voor, dan weet je het zeker.
icegodd
%Europe/Berlin %552 %2008, 13:15
In AS3 verwijst 'this' altijd naar waar de functie is geschreven, niet door welk object het wordt aangeroepen. Dit was in AS2 idd anders, maar doe maar eens trace(this) in beide functies, je zult zien dat ze hetzelfde zijn.....denk ik..Daar is trace() voor, dan weet je het zeker.
dat dacht ik al maar als ik dit ga doen gaat het fout:
'this' weg laten
var b=1;
var pippo1=10;
trace("pippo"+b); // ERROR
hoe kan ik het anders doen??
Dauntless
%Europe/Berlin %556 %2008, 13:21
Het moet ook met 'this', maar dan moet 'this' in beide gevallen hetzelfde zijn. Dus nogmaals: Wat geven traces van 'this'? (zowel bij het toekennen als bij het lezen)
Jan
%Europe/Berlin %559 %2008, 13:25
Met var in een functie maak je een lokale variabele aan die dus enkel bestaat binnen de scope van je functie. Met this ga je naar de 'global' scope en daar bestaan die variabelen niet. Wat is de uiteindelijke bedoeling ervan?
Groeten,
Jan
icegodd
%Europe/Berlin %634 %2008, 15:13
het bedoeling is een flash php sql dynamisch menu.
flash > php: mysql_num_rows() = 2.
php > flash print aantal_menu="2"&phpmenu1="menu1"&phpmenu2="menu2"
x aantal onderwerpen voor x aantal for lus met new movieclip
tot heden werkt dit(geen error).
maar in de for lus daar gaat het fout met: menu.text = event.target.data.phpmenu+i;
wat wel werkt in de lus is: menu.text = event.target.data.phpmenu1;
maar das niet dynamisch.
en met trace(this) geeft het overall een [object MainTimeline] (main stage tot in elke functie)
function completeHandler(event:Event):void {
trace(this); // [object MainTimeline]
var menu_c:String=event.target.data.aantal_menu;
if (menu_c!=null) {
for (var i:Number = 1; i<=Number(menu_c); i++) {
var menutext:menu_text=new menu_text();
menu_mc.addChild(menutext);
menutext.x=5;
menutext.y=30+i*20;
menutext.name="menutext"+i;
//var phpvar:String=String("phpmenu"+i);
var tekst:String=event.target.data."phpmenu"+i; // << error
menutext.result_txt.text=tekst;
}
} else {
}
}
eval["phpmenu"+i], this["phpmenu"+i], String["phpmenu"+i] en event.target.data["phpmenu"+i]; werkt ook niet
Jan
%Europe/Berlin %635 %2008, 15:15
maar in de for lus daar gaat het fout met:
menu.text = event.target.data.phpmenu+i;
wat wel werkt in de lus is:
menu.text = event.target.data.phpmenu1;
maar das niet dynamisch.
eval["phpmenu"+i], this["phpmenu"+i], String["phpmenu"+i] en event.target.data["phpmenu"+i]; werkt ook niet
event.target.data["phpmenu"+i]; werkt wel maar dan moet wel je php kloppen en dat is nu niet het geval:
print aantal_menu="2"&phpmenu1="menu1"&phpmenu2="menu2"
moet zijn:
print "aantal_menu=2&phpmenu1=menu1&phpmenu2=menu2";
Die quotes in dat printstatement hebben zowiezo toch weinig zin, want je krijgt altijd Strings terug van php.
Groeten,
Jan
icegodd
%Europe/Berlin %002 %2008, 00:03
moet zijn:
print "aantal_menu=2&phpmenu1=menu1&phpmenu2=menu2";
Die quotes in dat printstatement hebben zowiezo toch weinig zin, want je krijgt altijd Strings terug van php.
Groeten,
Jan
jij heb gelijk :)
ik ga nu ff mijn php code maar eens bekijken. nooit aan gedacht. dacht dat het fout aan AS3 lag.
function menu() {
select_database_menu();
$menu = mysql_query("SELECT DISTINCT item FROM menu");
$menu_count = mysql_num_rows($menu);
$output = "aantal_menu=$menu_count";
$i=1;
while ($cat_onderwerp = mysql_fetch_array($menu)) {
//$i++; <<< zwartepiet
$output.="&phpmenu".$i."=";
$output.=$cat_onderwerp["categorie"];
$i++;
}
print $output;
}
ik had mijn $i++; op de verkeerde plek staan tis nu opgelost en alles werkt. volgende keer geeft ik as3 niet zo snel de schuld ;).
nu ga ik ff verder puzzelen met dorpdown sub menu enzo.....THX
icegodd
%Europe/Berlin %052 %2008, 01:15
volgende probleem:
van flash naar php.
dit werkt:
function post_item():void {
var variables:URLVariables = new URLVariables();
var varSend:URLRequest=new URLRequest("as_php.php");
varSend.method=URLRequestMethod.POST;
varSend.data=variables;
var varLoader:URLLoader=new URLLoader ;
variables.sendRequest="post";
variables.array_length=item_array.length;
variables.array_id0=item_array[i]["id"]; //1
variables.array_naam0=item_array[i]["naam"]; //naam
variables.array_email0=tem_array[i]["email"]; //email
variables.array_nummer0=item_array[i]["nummer"]; //99
varLoader.load(varSend);
varLoader.dataFormat=URLLoaderDataFormat.VARIABLES ;
varLoader.addEventListener(Event.COMPLETE, verwerkt);
}
fwrite($fh, $_POST['array_id0']); //1
fwrite($fh, $_POST['array_naam0']); //naam
fwrite($fh, $_POST['array_email0']); //email
fwrite($fh, $_POST['array_nummer0']); //99
maar nu wil ik mijn array leeg gooien dmv array_id0,array_naam0,array_email0,array_nummer0 en array_id1,array_naam1,array_email1,array_nummer1 enz....
variables.array_length=item_array.length; //5
for (var i:Number=0; i<_item_array.length; i++) {
this["variables.array_id"+i]=item_array[i]["id"]; //array_id0, array_id1, array_id2 enz
variables.this["array_naam"+i]=item_array[i]["naam"];
variables.array_email[i]=tem_array[i]["email"];
variables.["array_nummer"+i]=item_array[i]["nummer"];
}
in alle 4 test opstelling wordt de var niet herkend. [V]
het probleem zit in de names + i;
help of idee???
Jan
%Europe/Berlin %058 %2008, 01:24
in alle 4 test opstelling wordt de var niet herkend. [V]
het probleem zit in de names + i;
help of idee???
variables["array_id"+i]=item_array[i]["id"];;
http://www.flashfocus.nl/forum/showpost.php?p=345066&postcount=5
Groeten,
Jan
vBulletin® v3.8.1, Copyright ©2000-2012, Jelsoft Enterprises Ltd.