SoftLeaf JS Render 시작하기
Restful 방식의 백그라운드 가 갖추어 졌을때 Data Mapping 을 위한 Javascript Renderer 단순 반복 작업의 간소화와 제각각의 코드의 형식을 통일 하기위한 의도로 제작 되었다.
기본 설정
HTML 페이지의 헤드에 필요한 태그를 수동으로 포함한 다음 스크립트를 초기화할 수 있습니다 .
먼저 softleaf render 의 최신 버전을 다운받아 주십시오 [릴리즈 바로가기]
그리고 , 다음 초기화 코드를 작성합니다.
-
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Softleaf JS Render Demo</title> </head> <body> <h1>Hello, world!</h1> </body> </html> -
소스코드에 Softelaf JS 파일 과 Jquery 파일을 포함합니다.
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Softleaf JS Render Demo</title> </head> <body> <h1>Hello, world!</h1> <script src="js/jquery.js"></script> <script src="js/jquery.softleaf.renderer.js"></script> </body> </html> - 이제 Renderer를 사용할 기본준비가 끝났습니다.
다음 단계
- Renderer 를 적용할 화면에 따라 사용할 랜더러를 선택합니다.
- listRender 는 리스트 화면을 구성하는데 적합합니다. 페이징 기능을 포함하고 있습니다.
- detailRender 는 수정, 상세, 추가 화면을 구성함에 있어 One Page로 구성할수 있게 도와줍니다.
- 자유도를 보장하기 위해 리스트 내부 혹은 등록폼의 세세한 기능은 별도로 선언하여 제작할수 있습니다.
- Data Mapping 이 주된 목적이기 때문에 URL 값이 필수로 필요합니다.
listRender
listRender 는 API 데이터가 list 형식으로 넘어왔을때 페이징 부터 테이블(리스트) html 형식으로 그려주는 역활을 한다.
목적
데이터 매핑 부터 화면 그리기 까지 단순 반복작업을 피하기 위함 이다. 다만 이것을 수행하기 위한 전제 조건으로서는 Rest API 의 Response 값의 형태를 지정할 필요가 있다.
데이터 샘플
{
"result" : {
"list" : [ //화면에 표기할 데이터 리스트
{
"first": "경환",
"last" : "성",
"handle" : "softleaf"
},
{
"first": "병일",
"last" : "이",
"handle" : "hslbi"
},
{
"first": "현철",
"last" : "박",
"handle" : "hc.park"
},
{
"first": "만석",
"last" : "김",
"handle" : "manpro"
}
],
"totalCount" : 4 //페이징 처리를 위한 필수 값 전체 게시물 수
}
}
기능
listRender 함수 정의서
| function | Access modifier | return value | Description |
|---|---|---|---|
| init | private void | null | initialize 초기화 listRender 호출시 자동 실행 |
| searchParam | public | object | 검색 폼 지정시 검색값 호출 가능 |
| makeHead | private void | null | 테이블 헤드 만들기 |
| getList | private void | null | option값에 설정된 URL 호출 |
| requestResult | public | object | URL 호출 시 response 값 |
| pagingParam | private | object | Paging 처리시 필요 한 값 저장 |
| pagingUtil | private | function | Util로 분리 되어있던 기능 통합 |
옵션
| Depth 1 | Depth 2 | Depth 3 | Depth 4 | Value | Description |
|---|---|---|---|---|---|
| url | TEXT | 데이터를 호출할 URL | |||
| class | TEXT | 리스트 table class | |||
| searchFrm | TEXT | 페이징 검색어 값 연동 을 위한 아이디 값 | |||
| searchBtn | TEXT | 버튼 클릭시 화면 재검색을 위한 버튼 아이디 값 | |||
| emptyText | TEXT | 테이블에 데이터가 없을 경우 노출할 문구 | |||
| columns | array | 데이터 키값 | |||
| object | name | TEXT | 데이터 키값 | ||
| text | TEXT | 테이블 컬럼명이 될 문구 | |||
| linkfunc | Function | 테이블 칸에 기능 넣기 해당 옵션값에 펑션 매핑 가능 | |||
| nformat | Bool | 숫자 포멧 true:false 값 true 설정시 천단위 콤마 표기 | |||
| class | TEXT | 테이블 헤더 값에 css 클래스 지정 | |||
| href | TEXT |
데이터 row에 링크 지정
ex) /example/detail?idx={idx} {}값에 들어가는 부분은 데이터 키값으로 지정 |
|||
| text_templet | TEXT | 표기될 텍스트 값에 대한 템플릿 지정
ex) <button type='button' data-idx='{idx}'>수정</button> {}값에 들어가는 부분은 데이터 키값으로 지정 |
|||
| tableHead | class | TEXT | 테이블 헤드에 들어갈 클래스 지정 | ||
| innerTag | TEXT | 테이블 헤드에 들어갈 내용이 있다면 | |||
| isPaging | Bool | 페이징 사용여부 true false | |||
| table | TEXT | 테이블 태그설정 | |||
| thead | TEXT | 테이블내 헤드 태그 설정 | |||
| tr | TEXT | 테이블 로우(줄) 설정 | |||
| td | TEXT | 테이블 내 칸 설정 | |||
| th | TEXT | 테이블내 머리글 칸 설정 | |||
| tbody | TEXT | 테이블 내 본문이 들어갈 태그 설정 | |||
| paging | object | 페이징 처리를 위한 옵션값 설정 | |||
| target | TEXT | 페이징 표기를 위한 대상 설정 | |||
| style | TEXT | default 1/10 형식과 1,2,3,4,5 형식의 스타일 설정 (default/spread) | |||
| pageLimit | number | 페이지내 표기할 게시물 수 결정 |
옵션 값을 선언 하는 부분은 DEMO 를 참고할것
detailRender
detailRender는 listRender와는 다르게 화면을 직접적으로 그리지는 않는다. DataMapping에 최적화 되어있다.
목적
데이터 매핑을 최소화 하며 상세 및 수정,등록의 모양이 같을 경우 html 코딩을 최소화 하여 하나의 view 파일로 사용할수 있게 한다.
데이터 샘플
{
"result": {
"idx": 70,
"select_test": 5,
"check1": "N",
"check2": "Y",
"subject": "제목",
"contents": "TEXTAREA 내용 입니다",
"just_text" : "단순 문자열",
"number": 10000,
"time": "2024-08-28 11:04:38",
"user_name": "SoftLeaf",
"array_data": [
{
"arr": "https://wemakeprice.com"
},
{
"arr": "https://coupang.com"
}
]
}
}
기능
detailRender 함수 정의서
| function | Access modifier | return value | Description |
|---|---|---|---|
| init | private void | null | initialize 초기화 detailRender 호출시 자동 실행 |
| getData | private void | null | option값에 설정된 URL 호출 |
| dataMapping | private void | null | 모드에 따른 분기처리 |
| editMode | private void | null | 수정 모드 |
| viewMode | private void | null | 상세 모드 |
| addMode | private void | null | 입력 모드 |
| customSelect | private void | null | 커스텀 셀렉트 적용시 버튼 이벤트 처리 |
| requestResult | public | object | URL 호출 시 response 값 |
| 그외 |
.detail_remove 클래스 적용시 상세모드 에서 감춰진다. .add_remove 클래스 적용시 입력모드 에서 감춰진다. .edit_remove 클래스 적용시 수정모드 에서 감춰진다. |
옵션
| Depth 1 | Depth 2 | Depth 3 | Depth 4 | Value | Description |
|---|---|---|---|---|---|
| url | TEXT | 데이터를 호출할 URL | |||
| mode | TEXT | 세가지 모드를 지원 수정 , 상세 , 추가 | |||
| customSelect | Bool | 커스텀 셀렉트 적용 여부 true , false (소프트리프 퍼블리싱 외 테스트 되지 않음) | |||
| columns | array | input 타입 속성 정의 | |||
| object | name | text |
데이터 키값 이자 input type 의 name 값 대상 지정용
기본 값으로 input 타입을 자동으로 인식하고 별도 옵션이 필요한 경우 값을 입력한다. |
||
| data | array | SELECT박스 데이터 | |||
| nformat | Bool | 숫자 포멧 true:false 값 true 설정시 천단위 콤마 표기 | |||
| id | TEXT | name 대체 타겟 지정 | |||
| viewmode | Bool | edit 모드 및 add 모드 에서 텍스트 노출이 필요한경우 true , false | |||
| key | TEXT | data key 지정 | |||
| is_array | Bool | 데이터가 배열 일 경우 true : false | |||
| row_target | TEXT | Jquery Selector 대상 지정
class : .class id : #id 배열일경우 대상 지정 |
|||
| add_class | TEXT | 배열의 경우 추가 버튼 지정을 해야 한다. | |||
| remove_class | TEXT | 배열의 경우 삭제 버튼 지정을 해야 한다. | |||
| text_templet | TEXT | 표기될 텍스트 값에 대한 템플릿 지정
ex) <button type='button' data-idx='{idx}'>수정</button> {}값에 들어가는 부분은 데이터 키값으로 지정 |
|||
| colums | array | 배열 내부의 input type 및 키 지정 | |||
| object | name | 데이터 키값 이자 input type 의 name 값 대상 지정용 자동 지정은 없으며 name만 지원한다. | |||
| type | 현재 지정 지원 타입은 link 배열내 URL 의 경우 상세 화면 에서 링크 형식으로 보여줌을 시사한다. |