IBSheet.create 함수로 초기화시 주의해야 할 사항은 아래와 같다.
1. 시트객체 중복 문제
- IBSheet.create 시 id값은 반드시 UNIQ 하게 설정해야 한다.
IBSheet.create({
id: "sheet", // 생성할 시트의 id
});id값이 중복으로 설정될 경우 아래와 같은 경고 메세지가 표출 된다.
[IBSheet.create({id:'sheet'})] Can't creation : Duplicate sheet_id already exists. "sheet"

SPA(Single Page Application) 또는 팝업 페이지에서 시트를 항상 새로 그려야 할때 UNIQ 하게 id를 지정 할 수 없다면, dispose 또는 disposeAll 함수로 DOM과 메모리에서 IBSheet 삭제하고 IBSheet.create를 다시 호출 하는 형태로 구현 되어야 한다.
let hasSheet = IBSheet.hasSheet("sheet"); //id 값이 sheet인 객체가 있는지 확인
if(hasSheet){ //시트객체가 있으면
IBSheet["sheet"].dispose(); //IBSheet라는 전역변수에 모든 시트가 배열로 관리된다.
}2. 시트를 그릴 DIV가 없을때 문제
- IBSheet.create 시 el에 설정한 DIV 객체가 없거나 DIV객체가 DOM 트리를 완성 전에 create 함수를 호출하게 되면 아래 오류를 만나게 된다.
- IBSheet는 el 에 해당하는 DIV에 html을 append 하는 형태로 동작하기 때문에 반드시 el에 해당하는 DIV가 랜더링이 완료된 시점에 create 함수를 호출해야 한다.
IBSheet.create({
id: "sheet", // 생성할 시트의 id
el: "sheetDiv" //시트를 생성할 Dom 객체 및 id
});[IBSheet.create({id:'sheet'})] 'el' argument must be HtmlDivElement or HtmlDivElement's id .

3. 비동기 동작 문제(중요)
- IBSheet.create 함수는 비동기로 동작한다.
- create 함수 호출 이후 시트 객체에 접근하는 로직이 있을 경우 pc 성능에 따라 동작을 보장 할 수 없다.
IBSheet.create({
id: "sheet", // 생성할 시트의 id
el: "sheetDiv",
options: opt,
});
sheet.doSearch("/search.do"); //조회 데이터가 표시 될수도 있고 안될수도 있음객체 초기화 하자마자 시트객체에 접근하는 로직을 구현해야 한다면 반드시 onRenderFirstFinish / onRenderFirstFinishAll 이벤트에서 작업하거나 IBSheet.create 함수가 동기로 동작하도록 sync를 설정한다.
[sync] - sync 예제
IBSheet.create 함수가 동기로 동작한다.
조회가 늦으면 IBSheet도 늦게 그려진다.
var opt = {
//각 열에 대한 정의 (열의 이름, 유형(Type), 포맷(Format)등을 설정)
Cols:[
{Header: "이름", Name: "sa_nm", Type: "Text"},
.....
]
};
//시트객체 생성
IBSheet.create({
id: "sheet", // 생성할 시트의 id
el: "sheetDiv", // 시트를 생성할 Dom 객체 및 id
options: opt, // 생성될 시트의 속성
sync: 1 //시트 생성 동기로 동작
});
sheet.doSearch("/search.do"); [async ] - onRenderFirstFinish 예제 (추천)
IBSheet.create 함수가 비동기로 동작한다.
callback 인 onRenderFirstFinish 이벤트에서 시트가 그려지고 난 이후에 처리해야 할 코드를 작성한다.
var opt = {
//각 열에 대한 정의 (열의 이름, 유형(Type), 포맷(Format)등을 설정)
Cols:[
{Header: "이름", Name: "sa_nm", Type: "Text"},
.....
],
Events :{
onRenderFirstFinish : function(evtParm) {
//시트가 다그려진 시점에 조회를 한다.
evtParm.sheet.doSearch("/search.do");
}
}
};
//시트객체 생성
IBSheet.create({
id: "sheet", // 생성할 시트의 id
el: "sheetDiv", // 시트를 생성할 Dom 객체 및 id
options: opt // 생성될 시트의 속성
});[async ] - onRenderFirstFinishAll 예제 (추천)
var opt = {
//각 열에 대한 정의 (열의 이름, 유형(Type), 포맷(Format)등을 설정)
Cols:[
{Header: "이름", Name: "sa_nm", Type: "Text"},
.....
]
};
//시트객체 생성
IBSheet.create({
id: "sheet", // 생성할 시트의 id
el: "sheetDiv", // 시트를 생성할 Dom 객체 및 id
options: opt // 생성될 시트의 속성
});
IBSheet.onRenderFirstFinishAll = function(obj){
sheet.doSearch("/search.do");
};4. IBSheet 관련 파일 여러번 호출시 문제
- 하나의 DOM에 IBSheet 관련 파일이 한번만 호출되어야 한다.(ibsheet.js, main.css 등)
아래 그림과 같이 팝업 화면을 기존의 dom에 append하여 보여지는 형태라면 팝업에서 IBSheet 관련 파일을 호출하면 안된다.
