5.바인딩 정보 처리하기

Edit

넥사크로 모듈 디벨로퍼는 "베타" 버전입니다.

- "베타" 기간 동안 일부 제품 기능은 변경될 수 있습니다.

- 온라인 매뉴얼 URL은 변경될 수 있습니다.

- 가이드에서 사용한 샘플 코드는 아래 링크에서 내려받을 수 있습니다.

https://github.com/TOBESOFT-DOCS/SIMPLE_MODULE_PROJECT/archive/master.zip

https://github.com/TOBESOFT-DOCS/SIMPLE_MODULE_PROJECT

5.1컴포지트 컴포넌트에 포함된 컴포넌트에 직접 바인딩하기

1

넥사크로 스튜디오에서 Dataset 오브젝트를 마우스로 드래그해서 컴포지트 컴포넌트로 가져갑니다.

2

Object 항목을 컴포지트 컴포넌트가 아닌 개별 컴포넌트로 지정합니다.

예를 들어 첫 번째 Calendar 컴포넌트는 "TwoMonthCalendar00.form.calTo"를 선택합니다.

3

Property, Dataset, ColumnID를 지정합니다.

4

앱을 실행하고 Dataest 오브젝트의 데이터를 변경할때마다 변경된 데이터가 컴포지트 컴포넌트에 반영되는 것을 확인할 수 있습니다. 또한, 컴포지트 컴포넌트에서 선택한 값은 Dataset 오브젝트의 데이터에 반영됩니다.

하지만 이런 방식은 컴포지트 컴포넌트에 추가한 속성과 바로 연결된 것이 아닙니다. 컴포지트 컴포넌트의 속성에서 바인딩 정보를 처리하기 위해서는 오브젝트 인터페이스 함수를 사용해야 합니다. 이번 장에서는 컴포지트 컴포넌트에서 추가한 속성의 바인딩 정보를 어떻게 처리하는지 살펴봅니다.

현재 버전에서는 하나의 컴포지트 컴포넌트에서 하나의 바인딩 정보만 처리할 수 있습니다. 때문에 TwoMonthCalendar 컴포넌트의 2개의 속성을 다 처리하지는 못합니다. 예제에서는 fromValue 속성 하나만 바인딩하는 것을 설명합니다.

5.2컴포지트 컴포넌트에 추가한 속성과 바인딩하기

5.2.1넥사크로 모듈 디벨로퍼에서 오브젝트 인터페이스 함수 추가하기

컴포지트 컴포넌트 개발 시 컴포넌트의 상태 변경을 처리해주기 위한 인터페이스 함수를 제공합니다. 바인딩 정보를 처리하기 위해서는 그 중에서 3개의 함수를 추가해주어야 합니다.

1

Project Explorer에서 xcdl 파일을 선택합니다.

Class Definition 탭이 열려있는 상태라면 속성창에 Object Interface Functions 항목이 표시됩니다.

2

아래 3개의 항목을 더블 클릭해서 인터페이스 함수를 추가합니다.

속성창에서 필터링 키워드로 "bind"를 입력하면 3개 항목을 쉽게 찾을 수 있습니다.

3

on_init_bindSource, on_change_bindSource 인터페이스 함수를 아래와 같이 수정합니다.

컴포지트 컴포넌트에 대한 바인딩 정보가 변경될 때 해당 정보를 Calendar 컴포넌트에도 전달해주는 겁니다. on_init_bindSource 인터페이스 함수는 바인딩된 Dataset 오브젝트의 Column ID가 없는 경우 컴포넌트의 속성값을 초기화하는 동작을 담당합니다. on_change_bindSource 인터페이스 함수는 바인딩된 Dataset 오브젝트의 데이터가 변경되는 경우 처리하는 부분을 담당합니다.

_pTwoMonthCalendar.on_init_bindSource = function (columnid, propid, ds)
{
    if (propid == "fromValue")
    {    
        this.fromValue = undefined;
    }
};

_pTwoMonthCalendar.on_change_bindSource = function (propid, ds, row, col)
{
    if (propid == "fromValue")
    {    
        if (this.form.calFrom)
            this.form.calFrom.on_change_bindSource("value", ds, row, col);
    }
};

4

on_getBindableProperties 인터페이스 함수를 아래와 같이 수정합니다.

바인딩할 속성을 명시해주지 않으면 Dataset 오브젝트와 바인딩된 상태에서 값을 가져올 수는 있지만, 컴포넌트에서 변경된 값을 Dataset 오브젝트에 전달하지는 못합니다.

_pTwoMonthCalendar.on_getBindableProperties = function ()
{
    return ["fromValue"];
};

5.2.2컴포지트 컴포넌트 속성에 직접 바인딩하기

1

넥사크로 스튜디오에서 Dataset 오브젝트를 마우스로 드래그해서 컴포지트 컴포넌트로 가져갑니다.

2

Object 항목은 컴포지트 컴포넌트를 그대로 유지합니다.

3

Property, Dataset, ColumnID를 지정합니다.

4

앱을 실행하고 Dataest 오브젝트의 데이터를 변경할때마다 변경된 데이터가 컴포지트 컴포넌트에 반영되는 것을 확인할 수 있습니다. 또한, 컴포지트 컴포넌트에서 선택한 값은 Dataset 오브젝트의 데이터에 반영됩니다.