본문 바로가기

Mobile/ApplusForm

MOML 호출순서_앱플러스폼(ApplusForm, AppForm)

ApplusForm에서 개발언어로 사용되는 것이 MOML입니다.
MOML은 XML과 동일한 문법으로 구성되므로 XML로 정의된 API라고 볼 수도 있습니다.

LABEL, WINDOW와 같은 UI Object는 stack에 쌓이듯이 소스에 배치한 순서대로 화면에 노출됩니다.
영역이 겹친다면 소스상에 나중에 배치한 가 먼저 배치한 의 상위 layer에 배치된다고 보면 됩니다.
소스만 보더라도 직관적으로 이해할 수 있습니다.

하지만, FUNCTIONLIST, UI등은 호출되는 순서가 정해져 있습니다.
배치하는대로 호출되지 않습니다.

아래 소스는 MOML의 한페이지를 구성하는 요소들입니다.

<MOML>
    <THEMES>
        <THEME />
    </THEMES>

    <DATASOURCELIST>
        <DATASOURCE />
    </DATASOURCELIST>

    <UI>
        <UILAYOUT>
            <WINDOW />
        </UILAYOUT>
    </UI>

    <FUNCTIONCALL/>

    <FUNCTIONLIST>
        <FUNCTION>
            <FUNCTIONITEM />
        </FUNCTION>
    </FUNCTIONLIST>
</MOML>

THEMES는 <UI>의 attribute를 공통으로 정의해서 사용할 수 있도록 만들어둔 일종의 define이라고 볼 수 있습니다.
따라서, <UI>가 생성될 때 참조하는 값일 뿐이지 자체적으로 특정 기능을 수행하지는 않습니다.

THEMES를 제외한 실행순서는 다음과 같습니다.

<DATASOURCELIST> → <UI> → <FUNCTIONCALL>

<DATASOURCELIST>의 데이터를 모두 얻어온 후에 를 생성합니다.
<UI>에서 <DATASOURCE>의 값을 이용해서 구성해야 하는 경우가 있으므로 모든 <DATASOURCE><UI>에 우선합니다.

<UI>가 생성되어 메모리에 모두 로드 완료되면 <FUNCTIONCALL>이 실행됩니다.

<FUNCTIONCALL>은 화면이 매번 보여질 때마다 실행되지 않는 것이 특징입니다.
현재 페이지가 처음 로드될 때만 호출이 되고 HIDE, SHOW될 때에는 호출되지 않습니다.

현재 페이지가 SHOW, HIDE될 때마다 특정 <FUNCTION>이 호출되도록 하고 싶다면, <UI>의 특정 OBJECT에 다음과 같이 event handler를 설정하는 것이 좋습니다.

<FUNCTIONLIST>
    <FUNCTION id="doShow">
        <FUNCTIONITEM cmd="device.toastPopup('show')"/>
    </FUNCTION>
    <FUNCTION id="doHide">
        <FUNCTIONITEM cmd="device.toastPopup('hide')"/>
    </FUNCTION>
</FUNCTIONLIST>

<UI>
    <UILAYOUT portrait="320,460">
        <WINDOW layout="auto,auto" onShow="function.doShow" onHide="function.doHide"/>
    </UILAYOUT>
</UI>

이제 이 페이지가 화면에 보여질 때에는 ‘show’ 팝업이 출력되고, 사라질 때에는 ‘hide’ 팝업이 출력됩니다.

이로써 MOML의 실행 순서를 간략하게 살펴보았습니다.

PS. <UI>가 그려진 상태에서 서버에서 데이터를 받아온 후 UI에 적용하고 싶은 경우에는..
<DATASOURCE>를 사용하기 보다는 http로 데이터를 얻어와서 UI에 적용하는 것이 좋습니다.