2008-09-24 6 views
3

J'ai donc un projet Flex qui charge un module à l'aide de ModuleManager - pas du chargeur de module. Le problème que j'ai est que pour charger un asset externe (comme une vidéo ou une image) le chemin pour charger cet asset doit être relatif au swf du module ... pas par rapport au swf qui a chargé le module.Flex: chargement de ressources dans des modules chargés en externe

La question est - Comment puis-je charger un actif dans un module chargé en utilisant un chemin relatif au swf parent, pas le module swf?


Arg! Donc, en fouillant dans la SWFLoader classe je trouve ce morceau de code dans la fonction privée LoadContent:

// make relative paths relative to the SWF loading it, not the top-level SWF 
    if (!(url.indexOf(":") > -1 || url.indexOf("/") == 0 || url.indexOf("\\") == 0)) 
    { 
     var rootURL:String; 
     if (SystemManagerGlobals.bootstrapLoaderInfoURL != null && SystemManagerGlobals.bootstrapLoaderInfoURL != "") 
       rootURL = SystemManagerGlobals.bootstrapLoaderInfoURL; 
     else if (root) 
       rootURL = LoaderUtil.normalizeURL(root.loaderInfo); 
     else if (systemManager) 
       rootURL = LoaderUtil.normalizeURL(DisplayObject(systemManager).loaderInfo); 

       if (rootURL) 
       { 
        var lastIndex:int = Math.max(rootURL.lastIndexOf("\\"), rootURL.lastIndexOf("/")); 
        if (lastIndex != -1) 
         url = rootURL.substr(0, lastIndex + 1) + url; 
       } 
      } 
} 

Donc, apparemment, Adobe est passé par l'effort supplémentaire pour faire charge des images dans le swf réelle et non le swf de haut niveau (sans drapeau à choisir autrement ...), donc je suppose que je devrais soumettre une demande de fonctionnalité pour avoir une sorte de drapeau "load par rapport à swf", éditer le SWFLoader directement, ou peut-être que je devrais avoir tout par rapport à pas le niveau supérieur ... des suggestions?

Répondre

1

Vous pouvez utiliser this.url dans le module et l'utiliser comme baseURL.

var urlParts:Array = this.url.split("/"); 
urlParts.pop(); 
baseURL = urlParts.join("/"); 
Alert.show(baseURL); 

et utiliser {baseURL + "/location/file.ext"} au lieu de /location/file.ext

Questions connexes