Javascript App Framework(이하 JAF)은 XE에서 사용되는 자바스크립트 코드를 보다 효율적이고 구조적으로 만들기 위한 메시징 기반의 프레임워크입니다.
JAF를 사용한 코드는 크게 앱(App)과 플러그인(Plugin)의 두 가지로 구분할 수 있습니다. 플러그인은 반드시 앱에 등록이 되어야 하며, 모든 앱은 xe 전역 객체에 등록되어야 합니다(소문자 xe에 주의하세요). 또한, xe는 앱의 특성도 가지고 있습니다.

그림 1) JavaScript App Framework의 구조
앱과 플러그인을 구분짓는 특징 중 하나는 플러그인을 자식으로 등록할 수 있는지 여부입니다. 앱은 플러그인을 자식으로 등록할 수 있지만, 플러그인은 항상 가장 하위에 존재합니다.
JAF에서 메시지를 전달하는 방법은 cast와 broadcast가 있습니다. cast는 하나의 앱 내에서만 전달되는 반면 값을 반환할 수 있으며, broadcast는 모든 앱과 모든 플러그인에 전달되지만, 값을 반환하지 않습니다. 일반적으로 사용하는 메시지는 cast를 통해서 전달하는 것이 좋으며 broadcast는 전역 이벤트(스크롤, DOMReady 등)에만 사용하는 편이 좋습니다.
cast 메소드를 플러그인에서 실행하면,
1. 메시지가 상위 앱으로 전달되고,
2. 앱에서는 메시지에 해당하는 API가 있는 자식 플러그인을 찾아서,
3. 자식 플러그인에 메시지를 전달합니다.
다음 이미지는 위 과정을 그림으로 나타낸 것입니다. 이해를 돕기 위해 PRINT 메시지를 전달한다고 가정했습니다.

그림 2) 플러그인4 에서 PRINT 메시지를 cast (인수는 "hello" 문자열)

그림 3) 메시지를 상위 앱에 전달

그림 4) 상위 앱에서 메시지에 대한 API가 존재하는 플러그인에 메시지 전달
그림 2에서 Plugin4는 PRINT 라는 메시지를 cast 했습니다. 이 메시지는 바로 Plugin4의 상위 앱인 APP3에 전달되고, APP3는 자식 플러그인 중 PRINT 메시지에 해당하는 API를 가지고 있는 플러그인에 이 메시지를 전달합니다. 이 때, 그림 4에서 보듯이 앱은 자기 자신에게 API가 있는지 먼저 탐색하고(1번), 그 다음에는 해당 메시지에 대한 API를 가진 플러그인에 등록 순서대로 메시지를 전달합니다(2번 → 3번).
broadcast는 cast 메소드와는 달리 모든 App과 모든 플러그인에 메시지를 전달합니다. 예를 들어, Plugin1에서 boardcast 메소드를 호출하면, xe는 물론, App1 ~ App3, Plugin1 ~ Plugin5 까지 모두 메시지를 전달받습니다.당연히 cast에 비해 실행 시간이 길어지므로, 꼭 필요한 경우에만 사용해야 합니다.
cast 혹은 broadcast 에 의해 발송된 메시지는 API_메시지 형태의 API 함수에 전달됩니다. 앞의 예에서 Plugin3이 PRINT 메시지를 수신하려면 다음과 같이 작성할 수 있습니다.