Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 17-01-2005, 00:18   #1 (permalink)
nah dran
 
Benutzerbild von -Panda-
 
Registriert seit: Sep 2002
Ort: Karlsruhe
Beiträge: 147
String in Funktionsaufruf umwandeln

Hallo,

hab grad mal wieder nen Knoten im Hirn. Ich versuche folgendes: aus einer XML lade ich ein Menu, und jeder Menupunkt hat das Attribut func, das einen String für einem bestimmten Funktionsaufruf enthält, in dieser Form: 'scope.irgendeineFunction(param1, param2, paramN)'. Der String soll dann in einen Funktionsaufruf umgewandelt werden.

Klappt soweit, wenn der Scope absolut referenziert ist. Wie muß ich es aber anstellen, wenn der Scope relativ von dem Objekt das diesen String erhält ausgehen soll, z.B. this.sub oder this._parent?

Zum Test hab ichs mal etwas vereinfacht:


PHP-Code:
function stringToFunction(pStr:String):Void {
    var 
ifuncpscopeargsa;
    
pStr.indexOf("(");
    
funcp pStr.slice(0i); // alles was vor der Klammer steht
    
scope = eval(funcp.slice(0funcp.lastIndexOf("."))); // alles was vor dem Funktionsnamen steht
    
func = eval(funcp);
    
args pStr.slice(i+1pStr.lastIndexOf(")")).split(",");
    for (var 
0i<args.lengthi++) {
        
= eval(args[i]);
        if (
!= undefined) {
            
args[i] = a;
        }
    }
    var 
obj = {func:funcscope:scopeargs:args};
    
obj.func.apply(obj.scopeobj.args);
}

// Irgendein Objekt...
main = new Object();
main.sub = new Object();
main.sub.traceText = function(pText) {
    
trace(pText);
};
main.meth = function() {
    
_root.stringToFunction('_root.main.sub.traceText("huh")');
};
main.meth(); 

Wäre cool, wenn jemandem was dazu einfällt!!

Danke und Gruß,
Panda
-Panda- ist offline   Mit Zitat antworten
Alt 17-01-2005, 03:06   #2 (permalink)
querdenker
 
Benutzerbild von kelor
 
Registriert seit: Jun 2001
Ort: formel1-stadt hockenheim
Beiträge: 4.731
ActionScript:
  1. funktionen = ["_root.myMC.traceArgs(para1,para2,para3,para4)", "_root.mcname.funcname(para1, para2, para3, para4)"];
  2. para1 = 'erstes';
  3. para2 = 'zweites';
  4. para3 = 'drittes';
  5. para4 = 'viertes';
  6.  
  7. // zum test mal schnell nen mc erstellt und ne funktion in dem mc
  8. this.createEmptyMovieClip('myMC', 1234);
  9. this['myMC'].traceArgs = function(a, b, c, d) {
  10.     trace(a+' || '+b+'  ||  '+c+'  ||  '+d);
  11. };
  12.  
  13. // mal schauen, was da so rauskommt bei..
  14. var elem = funktionen[0];
  15.  
  16. var endpfad = elem.lastIndexOf('.');
  17. var klammer = elem.indexOf('(');
  18. var func = elem.substring(endpfad+1, klammer);                           
  19. var path = elem.substring(0,endpfad);
  20. var param = elem.substring(klammer+1, (elem.length-1)).split(' ').join('').split(',');
  21. for(var i=0; i<param.length; i++){
  22.     var tmp = _root[param[i]];
  23.     param[i] = tmp;
  24. }
  25.  
  26.  
  27. // die hammerzeile überhaupt *gg*
  28. eval(path)[func].apply(null, param);
  29.  
  30. /*
  31. //oder zum besseren lesen:
  32. var fkt = eval(path)[func];
  33. fkt.apply(null, param);
  34. */



und hier der thread dazu...

funktionen zeitversetzt aufrufen


greetz

kelor
kelor ist offline   Mit Zitat antworten
Alt 17-01-2005, 07:29   #3 (permalink)
nah dran
 
Benutzerbild von -Panda-
 
Registriert seit: Sep 2002
Ort: Karlsruhe
Beiträge: 147
Danke, sieht gut aus! Aber ist das nicht in etwa das selbe wie mein Script?

Jedenfalls hab ich immer noch das Problem mit dem Scope bei relativen Pfaden. Also wenn ein Objekt den String 'myParent.doSomething()' erhält (myParent ist ein Verweis auf ein anderes Objekt) und ich leite den String weiter an die Funktion, die in umwandeln soll (die liegt von mir aus in _root oder ist eine Methode eines anderen Objekts), muß ich ja auch noch eine Referenz auf this mitgeben, damit der Pfad im Endeffekt stimmt.

Konkret gefragt heisst das, wie verknüpfe ich die Referenz auf this mit dem scope aus dem String? senderObj[myParent] würde ja gehen, aber was wenn der Pfad aus mehreren Elementen besteht? Irgendwie mit eval oder apply???

Viele Grüße,
Panda
-Panda- ist offline   Mit Zitat antworten
Alt 17-01-2005, 07:42   #4 (permalink)
querdenker
 
Benutzerbild von kelor
 
Registriert seit: Jun 2001
Ort: formel1-stadt hockenheim
Beiträge: 4.731
ActionScript:
  1. deineFunktion.apply(this, uebergabe);

und in der fkt kannst du ja mit:

this[auswerten] arbeiten, oder so ähnlihch...

greetz

kelor
kelor ist offline   Mit Zitat antworten
Alt 17-01-2005, 08:29   #5 (permalink)
nah dran
 
Benutzerbild von -Panda-
 
Registriert seit: Sep 2002
Ort: Karlsruhe
Beiträge: 147
Supi, dankeschön! So klappts dann:


PHP-Code:
_root.stringToFunction.apply(this, ['this.myParent.someFunction("Test")']); 
Ich glaub das mit dem apply hab ich jetzt endgültig geschuckt

Viele Grüße,
Panda
-Panda- 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 08:41 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele