00.Flex,Flash,ActionScript2013. 5. 13. 13:23
반응형

출처 : http://blog.marines.co.kr/archives/58

FLEX에서 SWFLoader를 이용하여 플래시SWF파일을 Embed시킬 경우에
간단하게 변수를 전달하는 것이 안되더군요. (SWFLoader.params = 어쩌고 이런 방식이 안됨;;)

이를 위해서는 이전부터 존재했던 LocalConnection을 사용하여야 통신이 가능합니다.

Javascript, AJAX를 사용하여도 되지만, 독립적인 실행이 가능하게 하려는 취지에는 맞지않지요.

private var lc:LocalConnection;

private function init():void {
lc = new LocalConnection();
lc.addEventListener(StatusEvent.STATUS, onStatus);
}

public function clickHandler():void {
webservice.getPhotoListArray.send();
}

private function onStatus(e:StatusEvent):void {
switch(e.level) {
case “status”:
trace(“swf send success”);
break;
case “error”:
trace(“Failed”);
break;
}
}

public function resultHandler(event:ResultEvent):void{
datas = ArrayCollection(event.result);
sendPhotoListData(datas, _imagePath);
}
private function onStatus(e:StatusEvent):void {
switch(e.level) {
case “status”:
trace(“swf send success”);
break;
case “error”:
trace(“Failed”);
break;
}
}
private function sendPhotoListData(data:*, _imagePath:String):void { //PhotoListData Request
try {
lc.send(“photoListData”, “dataHandler”, data, _imagePath);
}catch (e:Error) {
Alert.show(String(e));
}
}
public function faultHandler(event:FaultEvent):void {
Alert.show(event.fault.faultDetail, “Error”);
}



이와 같은 방법으로 FLEX의 송신부에서 localConnection 객체를 생성해주고 StatusEvent리스너를 달아줍니다.

FLASH의 수신부에는 아래의 코드를 입력해줍니다.

public function UIMFL_Base() {
Security.allowDomain(“*”);
//
lc = new LocalConnection();
lc.client = this;
try {
lc.connect(“photoListData”);
} catch (error:ArgumentError) {
trace(“Can’t connect…the connection name is already being used by another SWF”);
}
thumblist.mask = thumbMask;
}// End of Function

//Flex to Flash Data Response Handler Define
public function dataHandler(dt:*, _path:String):void {
var responseData:* = dt;
_strDomain = _path;
totalElementNum = responseData.length;
}


수신부에서는 이처럼 세팅합니다. 이런 방식으로 FLEX에서 플래시로 데이터를 전달할수 있고, 플래시에서 다시 FLEX로 데이터를 전달할때는 이 방식도 가능하겠지만, Event를 디스패치 시켜서 받는 방식도 가능합니다


private function init():void{
swfObj.content.addEventListener(“SWF_EVENT”, swfHandler);
}
private function swfHandler(e:Event):void {
currentOsgsSeq = e.target.currentTargetID;
}

Posted by 1010