2014-07-23 4 views
1

이 예제에서는 로컬 데이터 정렬에 약간의 문제가 있습니다. 정렬이 작동하지 않으며 그 이유를 알지 못합니다. 내 코드에서 문제를 설명해 주시겠습니까?JqGrid : 로컬 데이터 정렬

<table id="list" ></table> 
<div id="pager"></div> 
<script type="text/javascript"> 
    var myData = [ 
         { id: "1", cell: ["1", "test"] }, 
         { id: "2", cell: ["2", "test2"] }, 
         { id: "3", cell: ["3", "test3"] }, 
         { id: "4", cell: ["4", "test4"] } 
    ]; 
jQuery("#list").jqGrid({ 
    data: myData, 
    datatype: "local", 
    colNames: ['MyId','Client'], 
    colModel: [{ name: 'MyId', index: 'MyId', width: 100, align: 'left' , sortable: true}, 
       { name: 'Client', index: 'Client', width: 100, align: 'left', sortable: true }], 
    rowNum:10, 
    rowList:[10,20,30,100], 
    pager: '#pager', 
    sortname: 'Id', 
    localReader: {repeatitems: true},   
    viewrecords: true, 
    sortable: true, 
    sortorder: "asc", 
    caption: "Tests", 
    loadonce: true 
}); 
jQuery("#list").jqGrid('navGrid', '#pager', { edit: false, add: false, del: false }); 

</script> 

P. 이 데모에서는 로컬 데이터를 사용한 정렬 기능도 작동하지 않습니다. http://www.ok-soft-gmbh.com/jqGrid/LocalReader.htm

+0

"작동하지 않음"이란 무엇을 의미합니까? 좀 더 구체적 일 수 있습니까? – Robert

+0

"작동하지 않음"은 jqgrid 정렬을 사용하여 표에서 값을 정렬 할 수 없음을 의미합니다. 데모 [link] (http://www.ok-soft-gmbh.com/jqGrid/LocalReader.htm)에서 'client'열의 머리글을 클릭하면 정렬을 통해 요소의 순서가 변경되지 않습니다. – Aracturat

+0

그리고 정렬은 jqgrid 로컬 정렬을 의미합니다. – Aracturat

답변

2

당신이 맞습니다 : jqGrid는 datatype: "local"data 매개 변수가있는 localReader: {repeatitems: true} 형식의 버그가 있습니다.

버그를 수정하는 방법은 여러 가지가 있습니다. 가장 쉬운에서 한 날 다음

if(locdata || ts.p.treeGrid===true) { 
    rd[locid] = $.jgrid.stripPref(ts.p.idPrefix, idr); 
    ts.p.data.push(rd); 
    ts.p._index[rd[locid]] = ts.p.data.length-1; 
} else if (ts.p.datatype === "local" && dReader.repeatitems) { 
    var idStripted = $.jgrid.stripPref(ts.p.idPrefix, idr), 
     iData = ts.p._index[idStripted]; 
    if (iData !== undefined && ts.p.data != null && ts.p.data[iData] != null) { 
     $.extend(true, ts.p.data[iData], rd); 
    } 
} 

The demothe fixed code를 사용하고 올바르게 작동과 the lines

if(locdata || ts.p.treeGrid===true) { 
    rd[locid] = $.jgrid.stripPref(ts.p.idPrefix, idr); 
    ts.p.data.push(rd); 
    ts.p._index[rd[locid]] = ts.p.data.length-1; 
} 

을 대체 할 것으로 보인다. 나는 나중에 trirand에 제안 된 수정과 함께 해당 풀 요청을 게시 할 것입니다.

업데이트 : the pull request에 수정 프로그램을 더 잘 구현했습니다. 업데이트 됨 2 : 내 풀 요청은 이미 merged에서 the main code of jqGrid on the github입니다. jquery.jqGrid.srs.js에서 동일한 변경을 수행하고 here에서 수정 된 파일을 다운로드 할 수 있습니다. 어떤면에서 jqGrid의 다음 버전 (4.6.0 버전 이상)에는 설명 된 문제의 수정 사항이 포함됩니다.

+0

내 문제를 해결해 주셔서 감사합니다. 라이브러리의 소스 코드를 변경하지 않고이 버그에 대한 다른 해결 방법을 제안 해 주시겠습니까? 내 코드를 변경하는 다른 사람들이 jqgrid의 소스를 변경하고 결과에서이 버그를 다시 얻을 수 있기 때문에 jqgrid 라이브러리의 로컬 복사본의 소스 코드를 변경해서는 안됩니다. – Aracturat

+0

@Aracturat : 안녕하세요. 버그 수정을 trirand에 게시하고 jqGrid의 다음 버전에 포함될 것이라고 생각합니다. 그래서'jquery.jqGrid.src.js' 코드의 변경 제안은 정말로 안전합니다. jqGrid의 원래 코드를 사용하고 싶다면'myData'의 기본'repeatitems : false' 형식을 사용해야합니다 : var myData = [{id : "1", MyId : "1", Client : " 테스트 "}, ...];'당신은'localReader' 옵션을 제거해야합니다. – Oleg

+0

@Aracturat : 내 대답의 ** 업데이트 ** 부분을 참조하십시오. – Oleg