Application Domain - Klassendefinition - Instanzreferenz [Flash 9]
| Beiträge: 25 Registriert: Feb 2005
| 22.11.2010, 12:11
Hallo Flashgemeinde,
ich versuche gerade ein Projekt aufzubauen. Da es wahrscheinlich ziemlich groß werden wird, möchte ich das Projekt in mehrere externe SWFs aufteilen. Um Referenzen an die geladenen SWF-Files übergeben zu können, muss man die Definitionen Klassen der entsprechenden Datei bekanntgeben.
//Ausschnitt aus ... der Ladenden Klasse (extends Movieclip)
ActionScript:1 2 3 4 5 6 7 | private function classLoadedHandler(e:Event):void
{
var runtimeClassRef:Class = getClass("login");
swfRef = new runtimeClassRef();
//Variablen übergeben
swfRef.setRef(this);
}
|
und ...
ActionScript:1 2 3 4 5 6 7 8 9 10 | public function getClass(className:String):Class
{
try {
return loader.contentLoaderInfo.applicationDomain.getDefinition(className) as Class;
}
catch (e:Error) {
throw new IllegalOperationError(className + " definition not found in " + urlRequest);
}
return null;
}
|
ActionScript:1 2 3 4 | public function doLogin(user:String, pass:String)
{
//tue was
}
|
//Ausschnitt aus ... der geladenden Klasse/SWF (extends Movieclip)
ActionScript:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | public class login extends MovieClip
{
public var app:App;
private var btn:loginBtn;
public function login()
{
//Button erzeugen und positionieren
btn = new loginBtn();
btn.x = 400;
btn.y = 360;
addChild(btn);
//Button Event
btn.addEventListener(MouseEvent.CLICK, onClickLoginBtn);
}
//Listener Function
function onClickLoginBtn(myEvent:MouseEvent)
{
app.doLogin("user", "pass");
trace(app);
}
public function setRef(_app:App)
{
app = _app;
trace(app);
}
}
|
Nun mein Problem:
Ich lade eine SWF in die Application-SWF. Und kann auch mit den angegebenen Funktionen die Klassenreferenz aus der Funktion classLoadedHandler über die Funktion setRef an die Klasse login übergeben. Das Trace(app) zeigt mir auch das/die Objekt/Referenz Application an. Aus der Funktion setRef heraus kann ich auch auf die Klasse Application zugreifen.
Wenn ich jetzt aber über einen Button die Funktion onClickLoginBtn auslöse und dann auf eine Funktion der Applicationklasse zugreifen will, ist app == null ... die Referenz ist einfach weg.
Wie kann das sein? Hat jemand eine Ahnung?
Ich bin da echt ratlos. | Geändert von wind_up am 22.11.10 um 12:18 Uhr | |
| | Beiträge: 25 Registriert: Feb 2005
Themenautor/in
| 23.11.2010, 17:22
Soooo ... Dann antworte ich mir erst mal selbst und natürlich auch für die die es interessiert.
Diese Variante, welche ich hier zur Kommunikation angewandt habe, dient nur zum Austausch von Klassendefinitionen. Damit kann man also Definitionen aus anderen (SWF)-Domänen laden um sie dann z.B. in der (Haupt)-Domäne zu instantiieren.
Die Lösung für mein Problem: Die bidirektionale Kommunikation zwischen mehreren SWF-Files erreicht man durch sogenanntes Cross-Scripting. Eine genaue Lösung poste ich noch. Vielleicht interessiert es ja jemanden, denn Beispiele findet man im Internet so nicht ...
LG wind_up | Geändert von wind_up am 23.11.10 um 17:24 Uhr | |
| | Beiträge: 154 Wohnort: Berlin Registriert: May 2004
| 25.11.2010, 23:22
|
|