1

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){}
4

2 に答える 2

2

データグリッドからJSFLにオブジェクトを渡します。オブジェクトには、 keyreplacementtypeのプロパティがあります。これは、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のコンストラクターに押し込みます。

于 2009-07-13T09:59:56.173 に答える
1

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 );");
于 2010-07-02T21:40:14.613 に答える