2011-06-10 4 views
3

Flex로 작성된 웹 응용 프로그램이 있는데 조건부 컴파일을 사용하여 동일한 코드 기반에서 AIR 응용 프로그램을 작성하려고합니다.Flex (액션 스크립트)의 조건부 컴파일 및 import 문

AIR 응용 프로그램에서 다음과 같은 import 문이 필요합니다. import flash.data.SQLConnection; import flash.filesystem.File; 하지만 AIR 전용 클래스이기 때문에 웹 응용 프로그램에 이러한 import 문을 사용할 수 없습니다.

나는이 문제를 극복하기 위해 조건부 컴파일을 사용할 수 있다고 생각했지만 http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf69084-7abd.html 페이지에서 다음을 읽었습니다. "메타 데이터 또는 가져 오기 명령문을 조건부로 부울 값을 사용할 수 없습니다."

그렇다면 Flex 기반 웹과 데스크톱 응용 프로그램에 공통 코드베이스를 사용하려면 어떻게해야합니까? 아무도이 수수께끼를 해결 했습니까? 약간의 시행 착오 후

감사합니다,

딜립이 질문에

더 ... 나는이 프로젝트에 대한 이클립스에서 3 개 프로젝트 ... 웹 응용 프로그램에 대해 하나, AIR 응용 프로그램을 가지고 하나는 공통 소스 코드입니다. 웹 및 AIR 프로젝트에서 공통 소스 코드를 가리 킵니다. 공통 코드에서 조건부 컴파일을 사용했으며 다음과 같이 할 수 있습니다. CONFIG :: desktopMode { import flash.data.SQLConnection; import flash.events.SQLEvent; import flash.events.SQLErrorEvent; import flash.filesystem.File; }

및 유사한 방법으로 컴파일하는 동안 웹 또는 AIR 특정 기능을 포함 할 수 있습니다. 접근 방식은 지금까지 효과가있는 것으로 보인다!

내가 이슈를 가로 지르는 유일한 곳은 내 Cairngorm의 모델 검색 자입니다. Cairngorm의 모델 로케이터에있는 import 문 주변에 CONFIG :: desktopMode를두면 컴파일러에서 "잡히지 않은 예외"또는 "1131 클래스가 중첩되어서는 안됨"오류가 발생합니다. 이 오류를 해결하는 방법을 모르겠습니다!

Dilip

답변

2

코드에서 정규화 된 클래스 이름을 참조하는 가져 오기를 피할 수 있습니다. 이렇게하면 조건부 컴파일을 사용할 수 있습니다.

+0

좋은 속임수이지만 꽤 끔찍한 코드를 만듭니다. P –

+0

@J_A_X, 동의 함. 그리고 나에 관해서는 공통 인터페이스를 사용하여 플랫폼 종속 코드를 별도의 클래스로 추출하는 것을 선호합니다. 그리고 이러한 의존 관계를 주입 컨테이너 또는 일부 다른 방법 (귀하의 답변에 설명 된대로)을 사용하여 특정 구현 주입 인터페이스로 이러한 클래스를 사용하십시오. – Constantiner

1

일반적인 '코드베이스'는 실제로 상황이 아닙니다. 일반적인 코드베이스는 뷰와 같은 것이지만 Flex에서 Air 애플리케이션으로 비즈니스 계층이 변경됩니다. 이를 위해 두 개의 다른 프로젝트 (웹 용 프로젝트와 공중 용 프로젝트)를 만들고 두 프로젝트간에 공유 할 수있는 모든 공통 구성 요소, 클래스 등을위한 라이브러리 프로젝트를 작성하는 것이 좋습니다.

'flex라면이 코드 만 사용하십시오.'라는 말처럼 말하는 것은 불가능합니다. AIR에서이 기능을 사용하는 경우 AIR SDK가 추가 기능을 추가하고 '가져 오기'기능을 추가한다고해서 가져 오기에 대한 모든 참조를 제거해야 읽을 수 없으므로 작동하지 않습니다.

대부분의 클래스를 분리하고 추상화하여 두 프로젝트에 사용할 수 있도록 프로젝트를 적절하게 설계해야하고 각 프로젝트 내에서 특정 구현이 있어야합니다. Parsley와 같은 애플리케이션 프레임 워크를 사용하면이 작업을 수행하는 데 도움이 될 수 있습니다. 나는 그것이 나를 도왔다는 것을 안다.

0

언제든지 M4와 같은 일부 전처리기로 전환 할 수 있으며 IDE가 아닌 일반 빌드 도구를 사용하여 프로그램을 빌드 할 수 있습니다.