2010-04-24 4 views
2

Voici une requête architecturale intéressante. J'ai un morceau de code qui doit être exécuté sur le serveur (sous Node.js) et sur le client (dans une application Flash 10 écrite avec Actionscript 3). Le code est la plupart du temps une manipulation d'objet relativement complexe, il ne fait aucun appel API, et fonctionne très bien dans les deux contextes. Jusqu'à présent, le projet est juste une démo, donc j'ai été heureux de copier et coller le code dans les deux endroits. Mais il pourrait être très intéressant d'aller de l'avant avec ça.Utilisation du code dans Actionscript3 et Javascript

Alors, comment le feriez-vous?

  • Je suppose qu'il n'y a pas moyen facile d'obtenir le Flash SDK (doit construire sans un IDE) à lire et à faire quelque chose d'utile avec un fichier .js. Ma seule pensée est que je pourrais écrire un générateur de code qui prend le fichier .js et le place dans un wrapper ActionScript.

Y at-il des approches évidentes que j'ai manqué? Juste pour devancer une réponse évidente, je connais des langages multiplateformes comme HaXe. Pourquoi pas ExternalApi?

+0

Est-ce que #include vérifier l'extension du fichier? – drawnonward

+0

@drawnonward Non, ce n'est pas le cas. Dans AS 3.0, la directive est écrite sans le signe de hachage (contrairement à AS 1.0 et 2.0). –

Répondre

3

Une façon utilise inclure dans votre emballage le code Actionscript. Juste un test rapide et très simple:

package { 
    import flash.display.Sprite; 
    import flash.text.TextField; 

    public class Main extends Sprite { 


     private var _alertTxt:TextField; 

     include "some.js" 

     public function Main() { 
      _alertTxt = new TextField(); 
      _alertTxt.multiline = true; 
      _alertTxt.height = 400; 
      _alertTxt.width = 400; 
      addChild(_alertTxt); 
      run(); 
     } 

     public function alert(msg) { 
      _alertTxt.text += msg + "\n"; 
     } 
    } 
} 

some.js

function run() { 
    alert("run"); 
    var obj = { 
     a : 'hello', 
     b : 4.5, 
     c : false 
    }; 
    loop(obj); 
} 

function loop(obj) { 
    for (var field in obj) { 
     alert(obj[field]); 
    }  
} 

Pour compiler à partir de ligne de commande (vous pouvez ajouter d'autres options):

mxmlc -strict=false Main.as 

Si vous ne définissez pas strict à false, il ne compilera pas en raison de l'absence de déclarations de type.

+1

Gadzooks, Juan. Je ne savais pas que même existé. Je suis arrivé en ActionScript à la v.3 quand il est devenu un langage de développement «sérieux». Et je suppose que pour cette raison, je n'ai jamais découvert d'inclure. Solution parfaite. Merci. Je suis très content que ce soit si simple. – Ian

+1

Et 30 secondes plus tard, il fonctionne comme un charme ...Juste un FYI au cas où quelqu'un d'autre arrive à travers cela: je ne veux pas désactiver strict pour la majeure partie de ma compilation. Je compile donc ce composant enveloppé dans un fichier SWC pour le lier plus tard à la compilation finale. De cette façon, le contrôle laxiste ne me permet pas d'échapper à tout ce que je ne devrais pas ailleurs. – Ian

+1

Cool. Oui, l'inclusion n'est pas un élément secret, mais elle n'est pas non plus très médiatisée, car son utilisation est généralement désapprouvée. Mais je suis content qu'ils ne l'aient pas supprimé d'AS 3.0, car cela peut être très utile dans certains scénarios. –

0

pourquoi pas?

J'ai un morceau de code qui doit exécuter sur le serveur

ce genre de code est-il? si js peut gérer que ExternaAPI, fcommand ou javascript: "alert ('');" peut gérer que ...

how to inject javascript code in url to insert iframe in existing page peut aider à url js econding

+0

C'est une bonne suggestion, merci, mais malheureusement, cela ne fonctionnerait pas dans mon cas d'utilisation (le SWF ne fonctionne pas toujours dans un navigateur). – Ian

Questions connexes