티스토리 뷰
업무를 할때 그리드를 표시한 후 유의해야할 점들이 있다.
본인도 이 점에 대해 간과하고 있다가 최근에서야 문제점을 깨달아서
이에대해 간략히 정리해보고자 한다.
먼저 그리드에 뿌려진 데이터를 가져오기 위해서 쓰는 함수는
(jQuery 위젯을 통해 제공되는 함수)
getrows, getdisplayrows, getrowdata, getboundrows ...
등이 있다.
이 차이점을 분명히 인지하고 써야만
실수로 잘못된 데이터를 가져오는 일이 벌어지지 않는다... !
먼저 getrows 의 경우,
그리드에 표현된 그대로를 가져오는 듯 하다.
(getdisplayrows 와 차이점을 아직 느끼진 못했다.)
즉, 필터가 걸려져 있고 순서가 바뀌면
화면에 표시된 그대로를 가져온다는 말이다.
하지만, getboundrows
의 경우엔
그리드에 처음 로드되었을때의 그대로를 가져온다.
즉, filter, grouping, sorting 등에 영향을 받지 않는다는 것 !!
이점을 유의하는 것이 중요하다.
이 점을 중요하게 언급하는 이유는...
getrows 를 그대로 가져오고 그 내용을 for문으로 돌리다가
다른 데이터를 가져오는 실수를 범할 수 있기 때문 !!
예를들어,
getrows 로 값을 가져와서 id 의 값이 1인 경우에만
name 값을 Tom 으로 바꾸고 싶다고 가정하자.
직관적으로 코드를 짜보면,
이렇게 될 것이다.
var rowDatas = GRD._grid.jqxGrid('getrows');
for( var i = 0 ; i < rowDatas.length ; i++ ) {
if(rowDatas[i].id == '1'){
GRD._grid.jqxGrid('setcellvalue', i, 'name' , 'Tom');
}
}
막상 이 코드를 적용해 보면 아무 이상없이
내용이 적용된 것을 확인하고
그냥 넘어가기 쉽상이다.
만약 이 내용을 그냥 넘어간다면, 아직 jqxGrid 에 대한 이해가 부족하다고 할 수 있다.
이 코드의 문제점은 바로
rowindex 와 display rowindex 를 혼동했다는 점 !
getrows 함수는 말그대로 display된 행들을 차례대로 가져온다.
따라서, for 문 안에 쓰이는 i는 결코 rowindex가 될 수 없다.
즉, 보이는 rowindex (display rowindex)라고 할 수 있다.
만약 이 그리드를 filter를 바꾸거나 sort를 바꾼다면
잘못된점을 확인할 수 있을 것이다.
엉뚱한 값을 바꾸고 있는 것이다.
setcellvalue 함수는
rowindex 를 바탕으로 값을 바꿔주는 함수이다.
따라서 이 코드가 제대로 돌아가게 하기 위해선 다음과 같아야 한다.
var rowDatas = GRD._grid.jqxGrid('getrows');
for( var i = 0 ; i < rowDatas.length ; i++ ) {
if(rowDatas[i].id == '1'){
var rowIndex = GRD._grid.jqxGrid('getrowboundindex', i);
GRD._grid.jqxGrid('setcellvalue', rowIndex , 'name' , 'Tom');
}
}
이 차이점을 기억하고,
혼동하지 않도록 해야한다 !
'Programming > Javascript' 카테고리의 다른 글
[React.js] 튜토리얼 (583) | 2017.03.02 |
---|---|
[react] reactJs 튜토리얼 (580) | 2017.03.01 |
[nodejs] crawling test (941) | 2017.02.13 |
[생활코딩] nodejs tutorials (924) | 2017.01.29 |
[IE] frame 속 frame 디버깅 (1029) | 2016.04.04 |
- Total
- Today
- Yesterday
- 중국어강의
- 뒤꿈치 건조함
- 혁오
- 로꼬
- 중국어정리
- 알고리즘
- 자금조달계획서
- 서머너즈워
- Git
- GraphQL
- 부동산거래계약신고필증
- 수미네 반찬
- 마시내 탕수육
- 부동신 계약시 주의사항
- 노브랜드
- 중국어공부
- Axis2
- s9+
- 10cm
- 고운발크림
- AWS nodejs
- 프리티어
- ES6
- 웰빙헬스
- Bitnami
- 프렌즈
- 존맛탱
- 크러쉬
- 생활코딩
- AWS npm
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |