2009-06-24 14 views
1

我正在使用fla,作爲文件(文檔類)和jsfl文件。 swf在WindowSWF文件夾中生成(例如$ flash/WindowSWF)如何將windowSWF中的對象傳遞給JSFL?

我有一個簡單的windowSWF,我使用MMExecute和fl.runScript將變量從as3傳遞給jsfl。如果我使用對象,我不會想到會遇到麻煩。

在我windowSWF我有一個DataGrid名爲settingsGrid有以下欄目: [ 「前綴」, 「後綴」, 「型」] ,我特林通過settingsGrid.dataProvider.toArray()到jsfl腳本。

問題在於另一側未定義。有關我如何解決這個問題的任何提示?

簡短版本:如何從actionscript向jsfl傳遞諸如{prefix,「value」,suffix:「value」,type:「value」}之類的對象數組。傳遞單個對象的作品,當我通過一個數組我得到一個錯誤:

"Syntax Error: missing ] after element list" 

我的函數調用看起來是這樣的:

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

,並在JSFL文件的方法的簽名如下所示:

function generate(prefixArg,settingsArg){} 
+0

而不是發送settingsGrid.dataProvider.toArray()作爲參數的,我已經構建了JSFL友好腳本循環儘管數據提供程序,然後通過所構建的字符串作爲參數。如果有人發現它很方便,好吧,如果沒有,我很樂意刪除這個問題。 – 2009-06-24 17:14:20

回答

2

我將對象從數據網格傳遞給JSFL。這些物體具有以下屬性: ,替換類型。這裏是我用來構建一個字符串,我可以在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設置不會奇蹟般地保存不知何故,所以我用本地共享對象存儲從設置dataProvider。我想我可以用FLfile寫一個文件,但我不想將數組轉換爲字符串並返回。我正在將一個dataProvider的數組(dataProvider.toArray())寫入一個ByteArray,我只需讀回並在需要時將其插入新DataProvider的構造函數中即可。

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);"); 
+0

感謝您的建議。然後,我對as3有更多的經驗,而不是jsfl。已完成的擴展可在此處找到:http://www.adobe.com/cfusion/exchange/index.cfm?event=extensionDetail&extid=1860528。那時我正在將設置保存在SharedObject中。使用FLFile會更容易。另外如果我當時知道E4X的支持,它會簡單得多。它可能是2個命令(一個用於生成,一個用於配置),但面板看起來比XML UI更好:) – 2010-07-03 01:52:33