2009-09-24 8 views
1

Disons que j'ai deux swfs A et B, et à l'exécution, swf A charge swf B, et je souhaite partager le code entre eux, afin de minimiser la taille du fichier et les temps de téléchargement. Si swf B a du code (disons com.blah.HelloWorld), je dis au compilateur d'avoir la source de swf B dans le classpath de swf A, mais seulement de faire un lien de compilation et de ne pas compiler com.blah. BonjourWorld en swf A.Partage de code entre swfs

Cela fonctionne, et je l'ai essayé, en utilisant les options du compilateur -includes et -externs.

Cependant, mon problème est que je souhaite faire cela dans l'autre sens. c'est-à-dire swf A et B (et potentiellement swf C) ont tous besoin de com.blah.HelloWorld, mais je veux que com.blah.HelloWorld soit compilé juste en swf A, l'ai comme référence externe dans swf B (et potentiellement C aussi bien

J'ai essayé de le faire en utilisant les externs et includes, mais je reçois ReferenceErrors quand je fais cela.

Je veux faire ceci sans avoir un rsl séparé, donc je peux réduire le nombre de demandes http. Est-ce possible?

+0

Je suis en train de faire quelque chose de similaire ici http://stackoverflow.com/questions/1455144/circular-dependencies-in-flex-libraries Malheureusement, je n'ont pas encore trouvé comment le faire – Turambar

Répondre

1

Vous pouvez diviser votre application Flex en modules.

Vous pouvez également accéder à des cours individuels à partir d'un fichier SWF chargé à l'exécution en utilisant la méthode getDefinition de la classe ApplicationDomain:

var loader:Loader = new Loader(); 
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoad); 
loader.load(new URLRequest("c.swf")); 
//.. 
private function onLoad(e:Event):void 
{ 
    var domain:ApplicationDomain = LoaderInfo(e.target).applicationDomain; 
    var Type:Class = domain.getDefinition("pack.MyComponent") as Class; 
    var myBox:Sprite = new Type(); 
    addChild(myBox); 
} 
0

Je ne suis pas sûr de comprendre votre question, mais je pense que vous pouvez utiliser la classe AS3 Loader pour faire ce que vous voulez. Le format serait quelque chose comme ceci - disons que nous créons votre application principale (qui s'appellera "a.swf") et que vous voulez accéder aux méthodes et propriétés qui ont été compilées dans une autre application (appelée "b.swf"), vous feriez ceci:

var SWFB:Object; // empty at first as a placeholder. 

var url:URLRequest = new URLRequest("b.swf"); 
var l:Loader = new Loader(); 
l.contentLoaderInfo.addEventListener(Event.COMPLETE, loaded); 
l.load(url); 

function loaded(e:Event):void { 
SWFB = e.currentTarget.content as Object; 
initApp(); 
} 

function initApp():void { 
SWFB.someMethodCall(); 
} 

... et JE PENSE que ça marchera. Je ne peux pas le tester maintenant, mais essayez-le et faites le moi savoir. Fondamentalement, vous allez charger b.swf en tant qu'objet de base, et vous pouvez ensuite appeler des méthodes par rapport à cet objet.

S'il vous plaît laissez-moi savoir si cela a fonctionné, et sinon je peux l'affiner pour vous demain.

Questions connexes