Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 05-03-2004, 14:57   #1 (permalink)
Neuer User
 
Registriert seit: May 2003
Ort: Hannover
Beiträge: 17
Wie wandele ich Daten aus meiner Funktion in eine Eigenschaft des umgebenden Objekts?

Hallo,
ich habe folgendes Problemchen:

ich möchte die empfangenen Daten aus meinem loadVars-Object an das übergeordnete(?) Textfeld (oder ein neu gebildetes Object) übergeben. Mein angedachter Lösungsweg ist hier:
Mein Ansatz (der wohl falsch weil unfunktional) ist meist als Kommentar zu sehen.

ActionScript:
  1. Textfield.prototype.loadData=function(datei)
  2. {
  3.    
  4.     System.useCodePage=true;
  5.     lv = new loadVars();
  6.     lv.onLoad=function(temp)
  7.     {
  8.         if(temp)
  9.         {
  10.             //trace("GELADEN");
  11.             _root.con=this.con;
  12.             //trace(_root.con);
  13.             _root.tempObj= new Object();
  14.             _root.tempObj.con=this.con;
  15.             //trace(lv.con);
  16.         }
  17.     }
  18.     lv.load(datei);
  19.     this.text=lv.con//_root.tempObj.con;
  20. }
1. Wie geht das?

2. Wo befindet sich das loadVars-Object was ich in der vererbten Methode beim Aufruf einer Instanz bilde? In der Hauptzeitleiste, nur im Speicher, in Düsseldorf?
3. Wie stelle ich Daten dem Rest meines .swf zur Verfügung wenn diese in einer Funktion ohne Rückgabewert anstranden.
4. Wie kommt der Text aus lv.con ins Textfeld?

Über sachdienliche Hinweise würde ich mich sehr freuen.

Alex

Geändert von apollo009 (05-03-2004 um 15:05 Uhr)
apollo009 ist offline   Mit Zitat antworten
Alt 05-03-2004, 15:35   #2 (permalink)
Neuer User
 
Registriert seit: Mar 2002
Ort: D'dorf
Beiträge: 765
Hi Alex,

1. So:
ActionScript:
  1. System.useCodePage=true;
  2. Textfield.prototype.loadData=function(datei){
  3.     this.lv = new loadVars();
  4.     this.lv.scope   = this;
  5.     this.lv.onLoad=function(temp)
  6.     {
  7.         if(temp)
  8.         {
  9.             this.scope.text = this.con;
  10.         }
  11.     }
  12.     this.lv.load(datei);
  13. };
  14.  
  15. datei_txt.loadData("test.txt");
2. Nicht in Düsseldorf - das wüßt ich.
Weil du das LoadVars-Objekt im Textfield.prototype definierst, existiert es in der Textfield-Instanz, deren loadData-Methode du aufrufst.

3. Siehe 1. Außerdem sollten auch deine Variante (_root.con = this.con bzw. _root.tempObj.con = this.con) funktionieren.
Allerdings ist die load-Methode des LoadVars-Objekts asynchron. D.h. du kannst auf keinen Fall davon ausgehen, dass die Variablen direkt nach dem Aufruf von load verfügbar sind.

4. Siehe 1. Ich speichere eine Referenz des Textfeldes im LoadVars-Objekt in der Variablen "scope". Dadurch kann innerhalb des LoadVars-Objektes auf das Textfeld zugegriffen werden (this.scope.text = this.con).

Hoffe ist etwas klarer geworden?

gruß,
roman
romän ist offline   Mit Zitat antworten
Alt 05-03-2004, 15:39   #3 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: Stuttgart
Beiträge: 6.415
zu4.
im prototype für das textfeld verweist this auf das momentane textfeld-also von dem aus du die methode aufgerufen hast.
diese referenz übergibste deinem loadVars objekt. damit kannste auf dein textfeld ohne absolute pfade zugreifen

ActionScript:
  1. Textfield.prototype.loadData=function(datei)
  2. {
  3.        
  4.         System.useCodePage=true;
  5.         //lokal deklarieren
  6.         var lv = new loadVars();
  7.         //textfeld referenz erzeugen
  8.         lv.txtfield=this
  9.         lv.onLoad=function(temp)
  10.         {
  11.                 if(temp)
  12.                 {
  13.                     //versuch daten irgendwo abzulegen?
  14.                     //     _root.con=this.con;
  15.                     //     _root.tempObj= new Object();
  16.                     //     _root.tempObj.con=this.con;
  17.                    
  18.                     //übergebene referenz dazu benutzen dein textfeld anzusteuern
  19.                     this.textfield.text=this.con
  20.                    
  21.                     //(zu 3.)this._parent verweist auf die zeitleiste, wo das textfeld liegt
  22.                     //zuerst wird in dieser zeitleiste in lv ne referenz auf dein loadVars objekt
  23.                     //erstellt, da dieses aber nur temporär verfügbar ist
  24.                     //entsteht dort später eine vollwertige kopie
  25.                     this._parent.lv=this
  26.                 }
  27.         }
  28.         lv.load(datei);
  29.         //this.text=lv.con;  //_root.tempObj.con;
  30. }
zu 2.
das loadVars objekt wird auf dem root abgelegt, bzw die unterste ebene des momentanen levels

zu 3.
entweder du deklarierst bewusst die variable nicht per var(also lokal, mit verfall zum ende der funktion)
damit befindet sie sich im root.
ODER
du verweist absolut auf die zeitleiste wo sich das textfeld befindet(siehe oben AS)

gruß
deluxe
Deluxe ist offline   Mit Zitat antworten
Alt 05-03-2004, 15:41   #4 (permalink)
Neuer User
 
Registriert seit: May 2003
Ort: Hannover
Beiträge: 17
@ Roman
----------------

Vielen Dank, sehr präzise geantwortet!
Da sind doch so ein paar halbtransparente Sachen fast glasklar geworden.

Alex
apollo009 ist offline   Mit Zitat antworten
Alt 05-03-2004, 15:52   #5 (permalink)
Neuer User
 
Registriert seit: Mar 2002
Ort: D'dorf
Beiträge: 765
hi,

noch mal ich.
Danke für die Blumen.

Die Lösung von Deluxe ist allerdings etwas cleverer, denn
ActionScript:
  1. var lv = new loadVars();
erzeugt ein lokales Objekt, das automatisch wieder gelöscht wird wenn es nicht mehr gebraucht wird (bei meinem Script bleibt das loadVars-Objekt im Textfeld erhalten).

Allerdings funktioniert die Zeile
ActionScript:
  1. this._parent.lv = this;
nicht, weil das loadVars-Objekt keine _parent-Eigenschaft hat.
Denke mal, das war'n Tippfehler von Deluxe. Die Zeile müsste so lauten:
ActionScript:
  1. this.textfield._parent.lv = this;
gruß,
roman
romän ist offline   Mit Zitat antworten
Alt 05-03-2004, 15:56   #6 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: Stuttgart
Beiträge: 6.415
1. ups danke für die korrektur *g

2. nicht textfield
sondern txtfield(bzw entsprechend die referenz zuweisung ändern

3.noch ne korrektur von mir dann haben wirs:
da das loadVars keine zeitleiste angeboten bekommt
legt sie sich- sagen wir lieber der compiler machts- aufm root ab.

is wie bei movieclip prototype- wird nich explizit per this auf den mc verwiesen, liegt die variable am ende im root

deluxe

Geändert von Deluxe (05-03-2004 um 15:57 Uhr)
Deluxe ist offline   Mit Zitat antworten
Alt 05-03-2004, 17:13   #7 (permalink)
Neuer User
 
Registriert seit: May 2003
Ort: Hannover
Beiträge: 17
@deluxe
--------------------

Das heißt das loadVar-Objekt liegt nicht wie von Romän beschrieben in der textfeld-Instanz, sondern wenn kein Pfad zugewiesen wird im _root. bzw. oberste Ebene des entspr. Levels!?

Durch die Deklaration des Objekts als Funktions-Variable besteht es nur temporär und lokal!?

Ohne var vorweg wird es ohne Pfadangabe entsprechend resident im Speicher auf der obersten Ebene der Zeitleiste gehalten !?

Richtig zusammengefasst?

Gruß Alex

Geändert von apollo009 (05-03-2004 um 17:20 Uhr)
apollo009 ist offline   Mit Zitat antworten
Alt 05-03-2004, 17:22   #8 (permalink)
Neuer User
 
Registriert seit: Mar 2002
Ort: D'dorf
Beiträge: 765
korrekt zusammengefasst...
Asche auf mein Haupt

gruß,
roman
romän ist offline   Mit Zitat antworten
Alt 05-03-2004, 17:38   #9 (permalink)
Neuer User
 
Registriert seit: May 2003
Ort: Hannover
Beiträge: 17
PERFEKT - Danke an alle Beteiligten

CU Alex
apollo009 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 15:18 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele