환경: jqGrid v4.7.1 이하 (무료버전)
개별적으로 사용도 가능하며, jqGrid 내부에서 빈번하게 사용이 이루어지는 reloadGrid 메소드에 대해서 알아본다.
1004lucifer
https://github.com/tonytomov/jqGrid/blob/v4.7.1/js/jquery.jqGrid.js#L2821
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
}).bind('reloadGrid', function (e, opts) { | |
if (ts.p.treeGrid === true) { ts.p.datatype = ts.p.treedatatype; } | |
// opts.current 값이 true인경우 selectionPreserver 함수를 호출한다. | |
// selectionPreserver 함수는 multiselect 모드인경우 자동으로 호출된다. | |
// http://www.trirand.com/blog/?page_id=393/help/true-scrolling-not-working-and-need-to-keep-selected#p18068 | |
if (opts && opts.current) { | |
ts.grid.selectionPreserver(ts); | |
} | |
// datatype:'local' 이면 모든 row를 선택해제한다. | |
if (ts.p.datatype === "local") { $(ts).jqGrid("resetSelection"); | |
// 데이터가 있다면 normalizeData, refreshIndex 함수를 호출한다. | |
// normalizeData - 데이터정상화 | |
// refreshIndex - row의 index(기본값:id) 초기화 | |
if (ts.p.data.length) { normalizeData(); refreshIndex(); } } | |
// 데이터가 없고 treeGrid가 아니라면 데이터를 초기화 한다. | |
else if (!ts.p.treeGrid) { | |
ts.p.selrow = null; | |
if (ts.p.multiselect) { ts.p.selarrrow = []; setHeadCheckBox(false); } | |
ts.p.savedRow = []; | |
} | |
// 동적 스크롤 그리드 사용 시 데이터(row) 초기화 | |
if (ts.p.scroll) { emptyRows.call(ts, true, false); } | |
// opts.page 값이 있는경우 | |
// [주의사항] | |
// page의 값을 0으로 설정할 수 없으며, reloadGrid 메소드 호출전에 | |
// setGridParam을 이용해 page 값을 0으로 설정하더라도 이부분에서 page가 1로 변경된다. | |
if (opts && opts.page) { | |
var page = opts.page; | |
if (page > ts.p.lastpage) { page = ts.p.lastpage; } | |
if (page < 1) { page = 1; } | |
ts.p.page = page; | |
if (ts.grid.prevRowHeight) { | |
ts.grid.bDiv.scrollTop = (page - 1) * ts.grid.prevRowHeight * ts.p.rowNum; | |
} else { | |
ts.grid.bDiv.scrollTop = 0; | |
} | |
} | |
// 그리드의 데이터를 셋팅한다. | |
// (서버에 요청을 하거나 로컬인경우 해당 페이지의 데이터가 보여지도록 셋팅) | |
if (ts.grid.prevRowHeight && ts.p.scroll) { | |
delete ts.p.lastpage; | |
ts.grid.populateVisible(); | |
} else { | |
ts.grid.populate(); | |
} | |
// inlineNav(네비게이터에서 addRow, editRow, saveRow, restoreRow 버튼) | |
// 사용 시 해당 버튼들을 보여준다. | |
if (ts.p._inlinenav === true) { $(ts).jqGrid('showAddEditButtons'); } | |
return false; | |
}) |
공식문서에는 trigger("reloadGrid") 방법으로 사용하라고 기술되어있지만 다음과 같이 사용이 가능하다.
trigger("reloadGrid", { current:true, page:3 })
페이지를 업데이트 할 수 있으나 0값으로는 업데이트 할 수 없다.
전체적인 소스를 보니 jqGrid 에서는 page, lastpage 의 최소값의 기준을 1로 설정되어있다.
댓글
댓글 쓰기