Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 19-01-2004, 20:44   #1 (permalink)
Neuer User
 
Registriert seit: Aug 2002
Ort: Weimar
Beiträge: 36
Flash kommt bei der dyn Textfelderstellung nicht mit

Hallo erstmal,
nachdem ich nun stundenlang hier nach Lösungen gesucht habe und nicht fündig geworden bin folgendes:

Ich lade Variablen aus einem PHP Script. Diese Daten wandel ich in einer For-Schleife in Flash Vars um. Nun sollen Inhalte dieser Variablen in Textfelder, die dynamisch erstellt werden angezeigt werden. Habe dazu ein Script von Smirgel benuzt siehst Du hier nun hat er die Textfelder in der Schleife erst gar nicht angezeigt. Dann habe ich die Textfelderzeugung aus der For-Schleife rausgenommen und ein paar Keyframes später eine weitere For-Schleife eingebunden, die die Textfelder mit den Daten erstellt, das hat mal funktioniert, mal nicht. Nun also habe ich die letzte Schleife noch weiter nach hinten verschoben und jetzt hats funktioniert.
Das Problem ist nur, dass ich mich ja nicht darauf verlassen kann, was ist wenn mehr Vars kommen und er noch länger braucht... und warum braucht er so lange???
Hier mein anfängliches Script:
ActionScript:
  1. variablenladen = new LoadVars();
  2. variablenladen.onLoad = function (geladen) {
  3.    
  4.     //Abfrage, ob das Dokument geladen wurde
  5.     if(geladen) {
  6.         ladestatus = "Lade Daten";
  7.    
  8.         //Anzahl auslesen
  9.         anzahl = eval("variablenladen.anzahl");
  10.        
  11.  
  12.         for (var i=1; i<= anzahl; i++) {
  13.    
  14.                 //hier wird der string aus der php in variablen umgewandelt
  15.                  this["element_art"+i] = eval("variablenladen.art"+i);
  16.                  this["element_wert"+i] = eval("variablenladen.wert"+i);
  17.                  test = eval("variablenladen.wert"+i);//ist OK, wird immer gleich angezeigt
  18.                 
  19.                 
  20.                  //Textfeld erstellen und Füllen - Diesen Teil habe ich dann in ein hinteres Keyframe verschoben
  21.                  this.createEmptyMovieClip("mc"+i,i);
  22.                  this["mc"+i]._y=i*20;
  23.                  this["mc"+i].createTextField("textfeld",1,0,0,200,20);
  24.  
  25.           
  26.                                     this["mc"+i].textfeld.text=this["element_wert"+i];
  27.                         
  28.             }
  29.            
  30.     //Wenn nicht geladen:
  31.     } else {ladestatus = "konnte Daten nicht laden.";
  32.             }
  33. };
  34. variablenladen.load("xxl_pool_varuebergabe.php", this, "POST");

Hoffe, Jemand weiß da mehr als ich ... und davon sollte es doch hier einige geben...
__________________
frustra laborat, qui omnibus placere studet!
Titus ist offline   Mit Zitat antworten
Alt 19-01-2004, 23:58   #2 (permalink)
Farbe ist Luxus
 
Benutzerbild von ludabruda
 
Registriert seit: May 2003
Ort: Köln
Beiträge: 2.405
Hallo,

hmm, es scheint, als würde das onLoad-Event direkt nach Absenden ausgelöst und nicht erst, wenn alle Daten da sind, wie es eigentlich sen sollte.

Eigentlich ist es egal (mal abgesehen von Server-Timeouts), wie lange dein PHP zum Laden braucht; das onLoad-Event wird erst nach Abschluss des Ladevorgangs ausgelöst.

Wenn dein PHP aber sehr viele Daten generiert, könnte es ggf. zu einem TimeOut kommen und somit könnten nicht alle Daten geladen sein, wie z.B. die Variable anzahl. Somit würden ach keine Textfelder erzeugt.

Ein paar Dinge sind mir an deinem Skript aufgefallen, die vielleicht nicht ganz sinnvoll sind. Evtl. hängt es ja ach damit zusammen:

1. dein load-Aufruf benötigt nur eine URL; das Zielobjekt ist das ladende Objekt, und posten kannst du damit auch nix, dafür gibt es die sendAndLoad-Methode (die entspricht syntaktisch dem, was du geschrieben hast)

2. in der onLoad-Funktion evaluierst du Variablen, was unnötig ist, weil sie zu deinem LoadVars-Objekt gehören:
anzahl = this.anzahl; (this ist ja variablenladen)

3. du erzeugst den leeren MC für die Textfelder innerhalb von "this", also innerhalb des LoadVars-Objekts; ich weiß zwar nicht, ob das irgendwas schadet, es ist aber allemal unsauber. Stell dir nur vor, du löschst das Objekt nachher wieder, was bei großen Flash-Applikationen durchaus Sinn macht...Ersrtelle diesen MC also besser ausßerhalb.

Ich habe dir das Skript nochmal gepostet:
ActionScript:
  1. variablenladen = new LoadVars();
  2. variablenladen.onLoad = function (geladen) {
  3.     //Abfrage, ob das Dokument geladen wurde
  4.     if(geladen) {
  5.         ladestatus = "Lade Daten";
  6.        
  7.         //Anzahl auslesen
  8.         for (var i=1; i<= this.anzahl; i++) {
  9.             test = this["art"+i];//ist OK, wird immer gleich angezeigt
  10.            
  11.             //Textfeld erstellen und Füllen - Diesen Teil habe ich dann in ein hinteres Keyframe verschoben
  12.             _root.createEmptyMovieClip("mc"+i,i);
  13.             _root["mc"+i]._y=i*20;
  14.             _root["mc"+i].createTextField("textfeld",1,0,0,200,20);
  15.             _root["mc"+i].textfeld.text=this["wert"+i];   
  16.         }
  17.         //Wenn nicht geladen:
  18.     } else ladestatus = "konnte Daten nicht laden.";
  19. };
  20. variablenladen.load("xxl_pool_varuebergabe.php");

Wie gesagt: die Sachen sind keine echten Fehler, sollten also eigentlich den korrekten Ablauf nicht stören.
Schau dir vielleicht nochmal dein PHP an, wie das aussieht.
Was meinst du denn damit, dass das solange dauert?

Grüße
Sascha
__________________
12:15, press return
ludabruda ist offline   Mit Zitat antworten
Alt 20-01-2004, 08:32   #3 (permalink)
Neuer User
 
Registriert seit: Aug 2002
Ort: Weimar
Beiträge: 36
Nach weiteren Versuchen...

Als erstes mal Danke für Deine Antwort.
Ich habe also alles mal probiert und bin zu folgendem Ergebnis gekommen:

Es klappt jetzt, wenn ich das Textfeld über die var test fülle gehts, über _root["element_wert"+i]; funktioniert es nicht, wobei das ja nicht so schlimm ist, da die var test ja in jedem Durchlauf einen neuen Wert bekommt.

ActionScript:
  1. variablenladen = new LoadVars();
  2. variablenladen.onLoad = function (geladen) {
  3.    
  4.     //Abfrage, ob das Dokument geladen wurde
  5.     if(geladen) {
  6.         ladestatus = "Lade Daten aus dem Assoziationspool";
  7.  
  8.     //Anzahl auslesen
  9.         _root.anzahl = this.anzahl;  
  10.        
  11.         for (var i=1; i<= _root.anzahl; i++) {
  12.    
  13.                 //hier wird der string aus der php in variablen umgewandelt
  14.                  _root["element_art"+i] = this["art"+i];
  15.                  _root["element_wert"+i] = this["wert"+i];
  16.                  test = this["art"+i];//
  17.                 
  18.                 
  19.                  //moviclip erstellen und je nach Inhalt füllen
  20.                  _root.createEmptyMovieClip("mc"+i,i);
  21.                  _root["mc"+i]._y=i*20;
  22.                  _root["mc"+i].createTextField("textfeld",1,0,0,200,20);
  23.  
  24.           
  25.                                  _root["mc"+i].textfeld.text=test; //_root["element_wert"+i]; - funktioniert nicht
  26.                
  27.         
  28.             }
  29.            
  30.     //Wenn nicht geladen:
  31.     } else {ladestatus = "konnte Daten nicht laden.";
  32.             }
  33. };
  34. variablenladen.load("xxl_pool_varuebergabe.php");

Also im Prinzip kann ich damit leben, nur versteh ich nicht, warum er die Textfeldanweisung so nicht machen will...

Zitat:
Was meinst du denn damit, dass das solange dauert?
Ich dachte, er schafft es nicht, die Variablen rechtzeitig auszulesen um sie dann in die generierten Textfelder einzuspeisen. Er würde also die Felder generieren und den Wert zuweisen, die vars haben noch keinen Wert und daher sind die Textfelder dann leer. Desshalb dachte ich klappt es auch, wenn ich die Textfelderzeugung erst ein paar Keyframes später mache.
__________________
frustra laborat, qui omnibus placere studet!

Geändert von Titus (20-01-2004 um 09:18 Uhr)
Titus ist offline   Mit Zitat antworten
Alt 20-01-2004, 11:32   #4 (permalink)
Farbe ist Luxus
 
Benutzerbild von ludabruda
 
Registriert seit: May 2003
Ort: Köln
Beiträge: 2.405
ok, jetzt verstehe ich auch, was du mit _root["element_art"+i] vor hast...das kann auch schlicht nicht gehen. Du willst da quasi ein Array erzeugen, was so aber nicht funktioniert. Somit ist _root["element_art"+i] kein Objekt, undefiniert und nimmt ergo auch keine Werte an.
Wenn du die Daten auch außerhalb der Textfelder in einem Array verwahren willst, kannst du am Anfang des Skripts schreiben:

ActionScript:
  1. ...
  2. if(geladen) {
  3.                 ladestatus = "Lade Daten aus dem Assoziationspool";
  4.     _root.elements = new Array();
  5.     _root.artikel = new Array();
  6. ...

und in der Schleife...

ActionScript:
  1. ...
  2.     _root.elements.push(this["wert"+i]);
  3.     _root.artikel.push(this["art"+i]);
  4. ...

Also, die Erzeugung der Textfelder hat sicherlich funktioniert, aber der Inhalt war schlicht leer.
In solchen Fällen hilft es immer, nacheinander mögliche Fehler auszuschließen...

Also, PHP-Datei im Browser aufrufen und schauen, was diese eigentlich liefert (ist das auch richtig, kommt überhaupt was). Dann in Flash testen, ob diese Datei richtig eingelesen wird (einfach mit einem Haufen traces alles mal ausgeben lassen, oder den Debugger verwenden). Sowas wie Textfelder vielleicht erstmal mit "abc" füllen um zu sehen, ob die richtig erstellt wurden. Manchmal hakt es da auch mit der Farbe oder dem Font...

Kurz gesagt: wenn du ein Problem mit den Textfeldern lösen willst musst du sicherstellen, dass bis dahin auch alles funktioniert. Und ruhig auch die Sachen nochmal checken, die einem sicher scheinen und die man sich deswegen nicht anschaut...es sind so oft völlige Kleinigkeiten, an die man nie gedacht hätte..


bla, genuch geredet.

Grüße
Sascha
__________________
12:15, press return
ludabruda ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 10:19 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele