[JQUERY] 무료있는 jqGrid에 remapColumnsByName와 remapColums를 교체하는 방법
JQUERY무료있는 jqGrid에 remapColumnsByName와 remapColums를 교체하는 방법
해결법
-
1.우선 예전의 대답에 설명 된 코드가 항상 정확하지 작동하는지 언급하고 싶다. 당신은 그리드를 다시로드하기 전에 예 및 용도 열 선택기 여러 번에 하나의 행 선택 데모를 열 수있는 문제를 설명합니다. 예를 들어, 당신은 첫 번째 열 선택기와 "세금"열 후 "고객"열 변경 위치를 열 수 있습니다. 당신은 그리드에서 올바른 결과를 볼 수 있습니다. 그런 다음 한 번 더 열 선택기를 열고 예를 들어, "고객"열 후 "날짜"열을 이동할 수 있습니다. 당신은 순서 "양", "세금", "클라이언트", "날짜"의 열을 볼 수 있습니다 ... 이제 페이지를 다시로드 할 수 있습니다. 당신은 리로디드 페이지를 열 잘못된 순서가 있음을 볼 수 있습니다 : "클라이언트", "양", "세금", "날짜"... 문제의 이유 : 위치 정수 용도 열 선택기 또는 remapColumns에서 사용하는 순열 상대적으로 열 현재 주문에 열입니다. 그것은 열 순서의 절약은 더 복잡합니다. 하나는 원래 colModel의 재 배열로 원래의 열 순서 항상 다시 계산합니다 순열 배열의 값을 유지해야합니다.
우선 예전의 대답에 설명 된 코드가 항상 정확하지 작동하는지 언급하고 싶다. 당신은 그리드를 다시로드하기 전에 예 및 용도 열 선택기 여러 번에 하나의 행 선택 데모를 열 수있는 문제를 설명합니다. 예를 들어, 당신은 첫 번째 열 선택기와 "세금"열 후 "고객"열 변경 위치를 열 수 있습니다. 당신은 그리드에서 올바른 결과를 볼 수 있습니다. 그런 다음 한 번 더 열 선택기를 열고 예를 들어, "고객"열 후 "날짜"열을 이동할 수 있습니다. 당신은 순서 "양", "세금", "클라이언트", "날짜"의 열을 볼 수 있습니다 ... 이제 페이지를 다시로드 할 수 있습니다. 당신은 리로디드 페이지를 열 잘못된 순서가 있음을 볼 수 있습니다 : "클라이언트", "양", "세금", "날짜"... 문제의 이유 : 위치 정수 용도 열 선택기 또는 remapColumns에서 사용하는 순열 상대적으로 열 현재 주문에 열입니다. 그것은 열 순서의 절약은 더 복잡합니다. 하나는 원래 colModel의 재 배열로 원래의 열 순서 항상 다시 계산합니다 순열 배열의 값을 유지해야합니다.
또한 하나의 캔 대신 원래 열 모델에 상대적으로 변경된 컬럼 위치에 배열의 열 이름을 저장합니다. 즉 하나는 사용자에게 마지막 시간을 choosed 할 그리드에서 열 이름의 배열 cmOrder 같은 것으로 columnsState의 순열 속성을 교체해야합니다.
메소드 remapColumnsByName은 매우 간단합니다. 이 메소드 remapColumns처럼 작동하지만, 그 첫 번째 매개 변수는 열 이름의 배열 대신 정수 인덱스의 배열입니다.
데모는 빠르고 columnsState에 cmOrder 속성 대신 순열 속성을 사용하는 데모를 선택하고 추가 메소드 remapColumnsByName를 사용하도록 단일 행의 변경 더럽습니다. 나는 내 대답의 시작 부분에 설명 된 것처럼 같은 테스트를 반복한다면 당신은 새로운 데모가 내가 전에 설명하는 버그가없는 것을 볼 수 있습니다.
아래 찾을 원래 데모 다른 데모의 가장 중요한 부분 :
var getColumnNamesFromColModel = function () { var colModel = this.jqGrid("getGridParam", "colModel"); return $.map(colModel, function (cm, iCol) { // we remove "rn", "cb", "subgrid" columns to hold the column information // independent from other jqGrid parameters return $.inArray(cm.name, ["rn", "cb", "subgrid"]) >= 0 ? null : cm.name; }); }, saveColumnState = function () { var p = this.jqGrid("getGridParam"), colModel = p.colModel, i, l = colModel.length, colItem, cmName, postData = p.postData, columnsState = { search: p.search, page: p.page, rowNum: p.rowNum, sortname: p.sortname, sortorder: p.sortorder, cmOrder: getColumnNamesFromColModel.call(this), selectedRows: idsOfSelectedRows, colStates: {} }, colStates = columnsState.colStates; if (postData.filters !== undefined) { columnsState.filters = postData.filters; } for (i = 0; i < l; i++) { colItem = colModel[i]; cmName = colItem.name; if (cmName !== "rn" && cmName !== "cb" && cmName !== "subgrid") { colStates[cmName] = { width: colItem.width, hidden: colItem.hidden }; } } saveObjectInLocalStorage(myColumnStateName(this), columnsState); }, ...
또한 열의 순서를 복원 loadComplete 콜백는 다음과
loadComplete: function () { var $this = $(this), p = $this.jqGrid("getGridParam"), i, count; if (firstLoad) { firstLoad = false; if (isColState && myColumnsState.cmOrder != null && myColumnsState.cmOrder.length > 0) { // We compares the values from myColumnsState.cmOrder array // with the current names of colModel and remove wrong names. It could be // required if the column model are changed and the values from the saved stated // not corresponds to the var fixedOrder = $.map(myColumnsState.cmOrder, function (name) { return p.iColByName[name] === undefined ? null : name; }); $this.jqGrid("remapColumnsByName", fixedOrder, true); } if (typeof (this.ftoolbar) !== "boolean" || !this.ftoolbar) { // create toolbar if needed $this.jqGrid("filterToolbar", {stringResult: true, searchOnEnter: true, defaultSearch: myDefaultSearch}); } } refreshSerchingToolbar($this, myDefaultSearch); for (i = 0, count = idsOfSelectedRows.length; i < count; i++) { $this.jqGrid("setSelection", idsOfSelectedRows[i], false); } saveColumnState.call($this, this.p.remapColumns); },
나는 새로운 데모의 코드가 멀 완벽한 있음 반복합니다. 난 그냥 예전의 코드를 사용하고 무료있는 jqGrid에서 작업하고 새로운 remapColumnsByName 방법을 사용하여 만들기 위해 그것을 해결했습니다.
from https://stackoverflow.com/questions/31641594/how-to-replace-remapcolums-with-remapcolumnsbyname-in-free-jqgrid by cc-by-sa and MIT license
'JQUERY' 카테고리의 다른 글
[JQUERY] jQuery를 사용하여 폼 입력 필드를 얻? (0) | 2020.10.18 |
---|---|
[JQUERY] 어떻게 방법과 jQuery 플러그인을 만드는 방법? (0) | 2020.10.18 |
[JQUERY] VueJS 및 jQuery를 플레이 멋진합니다 (0) | 2020.10.18 |
[JQUERY] 어떻게 응답을 반환하기 전에 렌더링 할 페이지 기다릴 AJAX를 GET 요청을 얻으려면? (0) | 2020.10.18 |
[JQUERY] JQuery와 이벤트 처리기 - "최고"방법은 무엇 (0) | 2020.10.18 |