onLoad =function() Verstehe Schreibweise nicht

Lloyd

Erfahrenes Mitglied
Nun ich habe ein generelles Verständnisproblem mit folgenden Ausdrücken:
PHP:
LoadVars.onLoad = function() {Anweisungen}
Hier wird eine function einem event-handler übergeben (wegen = ). Und auch alle Anweisungen der function stehen dann in dem onLoad-object.
Das finde ich komisch.
Müsste es nicht eher heissen:
PHP:
if (LoadVars.onLoad == true)  {
       function() {
           Anweisungen;
                     }
       }
Oder so ähnlich. Ich kann mir das schlecht vorstellen wie das funktioniert und daher wird
das Programmieren auch nicht sauber.
Danke für Inspirationen.
 
Das LoadVars Objekt ist ein Objekt, welches sich daher definiert, das es lädt. Das klingt zwar jetzt blöd, ist aber genauso wahr wie: Eine Banane ist eine Banane ist eine Banane.
Dein zweiter Codeausschnitt ist dann logisch, wenn man von oben herab auf alle Objekte auf der Bühne schaut, und planwirtschaftlich zentral mit ihnen umgehen möchte. Das ist möglich, ist aber auch komplizierter, und ich will hier auch nicht erklären, wie man diese Logik korrekt implementiert. (Du bräuchtest zumindest noch einen onEnterFrame Event)Flashs Objektmodell beruht aber auf relativer Autonomie. In deinem Fall kannst du dein Lade-Objekt mit einem Auftrag wegschicken, und dann wenn es denn irgendwann geladen hat, kommt es von selber zu dir zurück, und meldet Vollzug, bzw tut dann still, was es soll.
Das ist sehr viel angenehmer, als alles selbst in der Hand zu haben.
'Fire and Forget' sozusagen. Problematisch wird das nur, wenn du auf der selben Zeitlinie mit Framebasierten Animationen arbeitest, was man aus diesem Grund auch tunlichst vermeiden sollte.

Grüsse
B
 
Danke. Ich komme vom Programmieren her aus nem C Hintergrund.
Daher ist es schwierig für mich sich das vorzustellen. Bequem ist das schon,
aber wenn ich Code lese und Fehler in der Logik feststellen will muss ich wissen wie etwas funktioniert. Mit "fire and forget" bin ich nicht zufrieden.
 
'Fire and Forget' in dem Sinne als du deinem Objekt einen Auftrag 'feuerst', und diesen bis zur Erfüllung 'vergessen' kannst.
 
Wie versprochen wärm ich das nochmal auf ;)
Der Nachteil von solchen Konstruktionen:
PHP:
LoadVars.onLoad = function() {Anweisungen}
ist dass ich zwar globale Variablen innerhalb der function nutzen kann, aber keine lokalen, die kurz vorher definiert wurden.
Denn wenn ich was an diesen Ausdruck übergebe. z.B. ...=function(m)....
dann wird m wenn es fertig geladen hat true. Das nützt natürlich nicht viel bei ner übergebungswilligen Integervariablen (jaja gibts nicht in Flash ;) )
Die Einschränkung einer function, dass es ein nach aussen geschlossener Raum ist, wird durch die Möglichkeit Parameter zu übergeben im "Normalfall" aufgehoben.
Also hat man mit diesem Konstrukt zwar die Bequemlichkeit von "fire and forget",
aber die Funktionalität leidet darunter, denn ich kann beliebige Parameter nicht mehr übergeben.
Das is jetzt eine eher theoretische Diskussion. Aber was meint ihr?
 
Ich bin nicht sicher, das ich dich richtig verstehe, aber

- einer Funktion in Flash kannst du durchaus alle möglichen Variablen als Parameter
übergeben.
- das onLoad Konstrukt ist nicht einfach eine Funktion, sondern ein sogenannter 'handler',
also ein Objekt, das für einen gewissen Zweck existiert, hier das 'handeln' von
Ladevorgängen. Deswegen wird jeder übergebene Parameter auch onLoad 'true'. Wenn du
jetzt aber von innerhalb des onLoad handlers eine Funktion mit Parameterübergabe
aufrufst, dann bleibt dein Parameter, auch wenn er lokal definiert wurde erhalten und
wandlungsfähig:
PHP:
testx = function (test)
{
	trace ("LokalVar:" + test);
};
_root.BIOS = new LoadVars ();
_root.BIOSpfad = Location + "BIOS.php?sprache=" + _root.Sprache + "&datum=" + new Date ().getTime ();
_root.BIOS.sendAndLoad (_root.BIOSpfad, _root.BIOS, "POST");
test = "hallo";
_root.BIOS.onLoad = function ()
{
	testx (test);
//// .....usw
}
- du siehst also, das der onLoad Handler zwar eine Funktion aufruft, aber insgesamt eine
eingeschränkte Subkategorie der Objektart 'Funktion' ist. Für Funktionen innerhalb des
onLoadHandlers gilt diese Einschränkung nicht mehr.
- Diese zugegebenermassen nicht unbedingt ganz logische Konstruktion wurde in Flash
MX2004 durch die neue Loader Klasse, bzw. das Loader Objekt ersetzt, das deinem Sinn
für Ordnung eher entgegenkommen dürfte. Für eine genauere Erklärung dieser neuen
Syntax bemühst du aber bitte zu erstmal deine Referenz, insofern du MX04 besitzt.


Grüsse
B
 
Zurück