2 votes

Flex : passage d'un fichier MXML en tant que paramètre XML

Est-il possible de passer du MXML en tant que paramètre (XML param) à partir d'une application externe et de le charger dynamiquement dans Flash Player pour créer une page. Par exemple

Je passe xml = <mx:canvas><mx:label text="hello" /></mx:canvas> à Flex et Flex devrait créer un canvas avec un contrôle de label dedans. Existe-t-il un exemple à ce sujet ?

Merci

3voto

cliff.meyers Points 10394

Le code MXML doit être compilé en ActionScript avant que Flash Player ne puisse faire quoi que ce soit avec lui. MXML n'est pas interprété par Flash Player au moment de l'exécution.

1voto

Ryan Guill Points 6115

Ce que vous voulez faire n'est pas possible. Comme l'a dit brd6644, le mxml est compilé en bytecode dans le swf qui est interprété par le lecteur flash. Le mxml (et même l'actionscript) n'est pas compris par le lecteur flash.

Cela dit, il existe une bibliothèque JSP que vous pouvez utiliser pour le MXML dynamique. Voir ici :

http://www.adobe.com/devnet/flex/articles/server_perf_05.html

Ce lien est ancien et je n'arrive pas à trouver un lien actualisé, mais je sais que le projet existe toujours. Je crois qu'il est toujours intégré à ColdFusion. Il vous permet de créer du mxml dynamique qui est compilé JIT à la demande. Bien sûr, les performances en sont considérablement affectées, mais si vous avez besoin de MXML dynamique, c'est une option.

Je mettrai à jour ce commentaire avec un meilleur lien dès que je l'aurai trouvé.

1voto

Treby Points 836

Il suffit de stocker le prope dans un fichier XML et de mettre un nom de classe de sorte que si vous chargez le XML vous pouvez disposer d'une fonction pour définir l'attribut attributs du XML à l'attribut propriétés du composant créé qui seront déterminées dans votre nom de classe

0voto

Chris Klepeis Points 4292

Je pense tout d'abord que non, car il s'agirait toujours d'un type "XML", et il n'y a pas de "eval" dans Actionscript 3. J'ai effectué une recherche rapide et je dois dire que non, ce n'est pas possible.

J'ai cependant fait quelque chose de similaire dans une application que j'ai créée.

Ce que j'ai fait, c'est stocker dans une base de données le type d'objet et quelques propriétés (x, y, largeur, hauteur, etc.). Ces données sont renvoyées par un appel d'objet distant et ces objets sont ensuite créés au moment de l'exécution, ce qui permet d'obtenir un effet similaire à celui que vous essayez d'obtenir.

Par exemple :

var resultAC:ArrayCollection = event.result as ArrayCollection;
var tmpCanvas:Canvas;

    for(var i:int = 0; i < resultAC.length; i++)
    {
      if(resultAC.getItemAt(i).type == "Canvas")
      {
         tmpCanvas = new Canvas();
         tmpCanvas.x = resultAC.getItemAt(i).x;
         tmpCanvas.y = resultAC.getItemAt(i).y;
         ...
         parent.addChild(tmpCanvas);
      }
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X