문제점
이런 방법을 사용하면 동기화 문제가 발생합니다. 즉 다음과 같은 상황이 발생할 수 있습니다.
위 그림이 이것이 동작하는 방식인데 Javascript의 호출이 너무 빨라 Flex 차트가 로딩되기 전에 3번 흐름이 먼저되는 경우가 발생할 수 있습니다. 그럴 경우 개체가 undefined라는 에러가 발생합니다. 즉 Flex가 생성되기 전 Flex를 호출하게 됩니다.
Javascript와 html이 로딩되어 동작하는 것과 Flex가 로딩되는 것이 별도로 진행되기 때문에 이런 에러가 발생합니다. 이것은 비단 이 경우 뿐만 아니라 Flex의 External Interface를 사용할 경우 발생할 수 있는 문제입니다.
해결방법
위 경우 Flex 차트가 준비(로딩)되어야 애플리케이션 동작이 가능하기에 Flex 차트가 로딩되면 위 과정을 수행하는게 좋습니다. 그런데 아쉽게도 javascript에서 Flex가 로딩되었는지 알 수 있는 이벤트는 찾지 못했습니다. 그 대신 Flex가 로딩되었는지 알려주는 이벤트를 다음과 같은 방법으로 구현할 수 있습니다.
1. Flex가 초기화되면 Flex는 Javascript에게 초기화되었다고 알려줍니다. 즉 Javascript의 function을 호출합니다.2. Javascript는 그제야 서버호출을 하거나 비즈니스 로직을 수행합니다.
3. 그리고 Flex 차트를 호출합니다. (이미 로딩된 후입니다.)
아래 소스는 Flex 초기화 메소드에서 맨 끝에 Javascript를 호출하는 Flex 소스입니다.
14행에서 파라메터로 전달받은 initCallback을 javascript 함수명으로 호출을 합니다.
아래는 HTML내의 Flex 객체 Object 태그입니다. initCallbaack 파라메터로 호출받을 javascript 함수를 넘깁니다.
...
codebase="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab">
...
<param name="flashvars" value="initCallback=send"/>
<embed id="LineChart" ...
...
flashvars="initCallback=send">
</embed>
</object>
이러면 Flex가 초기화되면 send라는 javascript 함수를 호출하겠네요.
마지막으로 Javascript 입니다.
이 부분은 별반 다를 게 없습니다.
우리는 Flex 컴포넌트를 이런 방법으로 많이 사용하고 있어 이런 방법으로 해결했습니다. 또 다른 방법이 있기는 한데 이 방법이 아직 가장 안정적입니다.
더 좋은 방법을 없을까요?
'웹기술들' 카테고리의 다른 글
| Struts 태그에서 자동생성되는 TD 태그 없애기 (4) | 2010/03/22 |
|---|---|
| 스프링 프레임워크 3.0 GA 릴리즈 - 기능 요약 (0) | 2009/12/30 |
| Flex에서 ExternalInterface 사용시 동기화 문제 (1) | 2009/12/23 |
| Java로 엑셀 다운로그 구현하기 (0) | 2009/12/20 |
| Cross domain JSON 원리 (3) | 2009/12/09 |
| Cross domain Ajax: 간략 요약 (0) | 2009/12/08 |



