{lang: 'de'}
Flashhilfe.de - Flash Community

Application Domain - Klassendefinition - Instanzreferenz [Flash 9]

 


AntwortenRegistrieren Seite1  

wind_up#1
Benutzerbild von wind_up
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
wind_up#2
Benutzerbild von wind_up
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
Maddy#3
Benutzerbild von Maddy
Beiträge: 154
Wohnort: Berlin
Registriert: May 2004

25.11.2010, 23:22