WindowSWF에서 JSFL로 개체를 전달하는 방법은 무엇입니까?
-
22-07-2019 - |
문제
FLA, AS 파일 (문서 클래스) 및 JSFL 파일로 작업하고 있습니다. SWF는 WindowSWF 폴더에서 생성됩니다 (예 : $ flash/windowswf)
간단한 WindowSWF가 있고 MMExecute 및 Fl.Runscript를 사용하여 변수를 AS3에서 JSFL로 전달합니다. 그래도 물체를 사용한다면 문제가 발생한다고 상상하지 못했습니다.
내 Windowswf에는 DataGrid가 호출되었습니다 SettingSgrid 다음 열이 있습니다 : [ "접두사", "접미사", "유형"] 그리고 나는 통과하기 위해 트링 settingsgrid.dataprovider.toArray () JSFL 스크립트에.
문제는 반대편에서 정의되지 않은 것으로 나온다는 것입니다. 내가 어떻게 돌아올 수 있는지에 대한 힌트가 있습니까?
짧은 버전 : {prefix : "value", 접미사 : "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){}
해결책
데이터 그리드에서 JSFL로 객체를 전달합니다. 객체에는 다음과 같은 속성이 있습니다.열쇠, 바꿔 놓음 그리고 유형. 다음은 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 ())를 바이 테레에 쓰고 있는데, 필요할 때 방금 읽고 새로운 Dataprovider의 생성자로 밀어 넣었습니다.
다른 팁
Wind
다음 명령은 도구 모음의 채우기 색상을 검은 색으로 설정합니다. 예를 들어 색상의 값은 색상 피커 구성 요소에서 잡은 다음 JSFL로 전달 될 수 있습니다. 내가하는 일은 행동 스크립트에서 mmexecute를 통해 전송 된 문자열로 변수를 연결하는 것입니다.
var myColor:String = "#000000";
MMExecute("var fill = fl.getDocumentDOM().getCustomFill(\"toolbar\");fill.style= \"solid\";fill.color = \'"+myColor+"\';fl.getDocumentDOM().setCustomFill( fill );");