windowSWFからJSFLにオブジェクトを渡す方法は?
-
22-07-2019 - |
質問
fla、asファイル(ドキュメントクラス)、jsflファイルを使用しています。 swfはWindowSWFフォルダーに生成されます(例:$ flash / WindowSWF)
単純なwindowSWFがあり、MMExecuteとfl.runScriptを使用して、as3からjsflに変数を渡します。ただし、オブジェクトを使用すると問題が発生するとは思いませんでした。
windowSWFには、次の列を持つ settingsGrid というDataGridがあります。 ["prefix" "、" suffix "" "" type ""] そして、 settingsGrid.dataProvider.toArray()をjsflスクリプトに渡そうとしています。
問題は、反対側で未定義として出てくることです。どのように私がそれを回避できるかについてのヒントはありますか?
短いバージョン:{prefix:" value"、suffix:" value"、type:" value"}のようなオブジェクトの配列をactionscriptからjsflに渡すにはどうすればよいですか。単一のオブジェクトを渡すと機能しますが、配列を渡すとエラーが発生します:
"Syntax Error: missing ] after element list"
私の関数呼び出しは次のようになります:
MMExecute('fl.runScript(fl.configURI + "Commands/LazyGen.jsfl","generate","_",'+ settingsGrid.dataProvider.toArray() +');');
そしてjsflファイル内のメソッドの署名は次のようになります:
function generate(prefixArg,settingsArg){}
解決
オブジェクトをデータグリッドからJSFLに渡します。オブジェクトには次のプロパティがあります。 key 、 replacement 、 type 。 actionscriptからJSFLで渡すことができる文字列を作成するために使用した関数は次のとおりです。
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;
}
SWFの設定が魔法のように保存されていないことに気づいたので、ローカルのSharedObjectを使用してdataProviderの設定を保存しました。 FLfileを使用してファイルを作成できたのではないかと思いますが、配列を文字列に変換したり戻したりしたくないのです。 dataProviderの配列(dataProvider.toArray())をByteArrayに書き込みます。これを読み直して、必要なときに新しいDataProviderのコンストラクターに押し込みます。
他のヒント
windowsSWF内で変数値を計算し、MMExecuteコマンドを介して変数をJSFLに渡すだけです。
次のコマンドは、ツールバーの塗りつぶし色を黒に設定します。そのため、たとえば、色の値をカラーピッカーコンポーネントから取得し、jsflに渡すことができます。アクションスクリプトの変数をMMExecute経由で送信される文字列に連結するだけです。
var myColor:String = "#000000";
MMExecute("var fill = fl.getDocumentDOM().getCustomFill(\"toolbar\");fill.style= \"solid\";fill.color = \'"+myColor+"\';fl.getDocumentDOM().setCustomFill( fill );");