Question

Je travaille avec un fla, un fichier as (classe de document) et un fichier jsfl. le fichier swf est généré dans le dossier WindowSWF (par exemple, $ flash / WindowSWF)

J'ai un simple windowSWF et j'utilise MMExecute et fl.runScript pour passer des variables d'as3 à jsfl. Je n’imaginais pas que j’aurais des problèmes si j’utilisais des objets.

Dans ma fenêtreSWF, j'ai un DataGrid appelé settingsGrid avec les colonnes suivantes: ["préfixe", "suffixe", "type"] et je tente de passer settingsGrid.dataProvider.toArray () au script jsfl.

Le problème, c’est qu’il apparaît indéfini de l’autre côté. Des allusions sur comment je peux contourner ça?

La version courte: comment passer d'un tableau d'objets tels que {préfixe: "valeur", suffixe: "valeur", tapez: "valeur"} de actionscript à jsfl. Passer des objets simples fonctionne, je reçois une erreur lorsque je passe un tableau:

"Syntax Error: missing ] after element list"

Mon appel de fonction se présente comme suit:

MMExecute('fl.runScript(fl.configURI + "Commands/LazyGen.jsfl","generate","_",'+ settingsGrid.dataProvider.toArray() +');');

et la signature de la méthode dans le fichier jsfl ressemble à ceci:

function generate(prefixArg,settingsArg){}
Était-ce utile?

La solution

Je passe des objets d'une grille de données à JSFL. Les objets ont les propriétés suivantes: clé , remplacement et type . Voici la fonction que j'ai utilisée pour construire une chaîne que je pourrais transmettre en JSFL à partir d'ActionScript:

private function dataProviderToString(dataProvider:DataProvider):String{
            var settingsString:String = '[';
            for(var i:int = 0 ; i < dataProvider.length ; i++){
                if(i < (dataProvider.length-1)) settingsString += '{key:"'+ dataProvider.getItemAt(i).key + '",replacement:"' + dataProvider.getItemAt(i).replacement + '",type:"'+ dataProvider.getItemAt(i).type + '"},';
                else settingsString += '{key:"'+ dataProvider.getItemAt(i).key + '",replacement:"' + dataProvider.getItemAt(i).replacement + '",type:"'+ dataProvider.getItemAt(i).type + '"}';
            }
            settingsString += ']';
            return settingsString;
        }

J'ai remarqué que les paramètres du fichier SWF n'avaient pas été sauvegardés comme par magie. J'ai donc utilisé SharedObject local pour stocker les paramètres à partir de DataProvider. J'imagine que j'aurais pu simplement écrire un fichier en utilisant FLfile, mais je ne voulais pas continuer à convertir des tableaux en chaînes et vice-versa. J'écris un tableau du fournisseur de données (dataProvider.toArray ()) dans un ByteArray que je viens de lire et d'insérer dans le constructeur d'un nouveau fournisseur de données lorsque j'en ai besoin.

Autres conseils

Déterminez simplement la valeur de vos variables dans WindowsSWF et transmettez-les à JSFL via la commande MMExecute.

La commande suivante définit la couleur de remplissage de la barre d'outils en noir. Ainsi, par exemple, la valeur de la couleur peut être extraite d’un composant de sélection de couleur puis transmise à jsfl. Tout ce que je fais est de concaténer la variable du script d'action dans la chaîne envoyée via MMExecute.

var myColor:String = "#000000";
MMExecute("var fill = fl.getDocumentDOM().getCustomFill(\"toolbar\");fill.style= \"solid\";fill.color = \'"+myColor+"\';fl.getDocumentDOM().setCustomFill( fill );");
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top