2017-09-20 6 views
1
사실

로 설정되어있는 경우에만 행을로드하는 방법.있는 jqGrid :</p> <pre><code>{ "rows": [ { "id":1, "name": "Peter", "hasData": true, }, { "id":2, "name": "Tom", "hasData": false, }] } </code></pre> <p>그리고 내가있는 jqGrid가 <code>"hasData" == true</code> 때를 의미하는 데이터가있는 경우에만 행을로드 할 : 속성이 나는 다음과 같은 JSON 개체를

나는 무엇을하는 것이 가장 좋은 방법인지 두 번째로 궁금해합니다.

UPDATE : 내가 시도 다음

gridComplete: function(){ 
    var rowObjects = this.p.data; 
    for(var i = 0; i<rowObjects.length;i++){ 
     if(rowObjects[i].hasData == false){ 
     $(this).jqGrid('delRowData',rowObjects[i].id); 
     } 
    } 
    }, 

하지만 모든 데이터가 JSON에서 새로운로드, 다음 페이지로 이동하면 문제가 있습니다.

답변

0

loadonce: true 옵션과 함께 datatype: "json"을 사용하여 서버에서 데이터를로드한다고 가정합니다. jpGrid의 free jqGrid 포크를 사용하면 해결 방법이 매우 쉽습니다. 무료 jqGrid를 사용하면 서버의 데이터를 정렬하고 필터링 할 수 있습니다. 전에의 첫 번째 페이지가 표시됩니다. 하나는 필터를 적용하기 위해 필요한 필터, 그리고 옵션 search: true에있는 jqGrid 및 postData.filters으로 적용하는 작업을 강제로 forceClientSorting: true을 추가해야합니다

$("#grid").jqGrid({ 
    ... 
    datatype: "json", 
    postData: { 
     // the filters property is the filter, which need be applied 
     // to the data loaded from the server 
     filters: JSON.stringify({ 
      groupOp: "AND", 
      groups: [], 
      rules: [{field: "hasData", op: "eq", data: "true"}] 
     }) 
    }, 
    loadonce: true, 
    forceClientSorting: true, 
    search: true, 
    // to be able to use "hasData" property in the filter one has to 
    // include "hasData" column in colModel or in additionalProperties 
    additionalProperties: ["hasData"], 
    ... 
}); 

그것을 보여 데모 https://jsfiddle.net/OlegKi/epcz4ptq/을 참조하십시오. 이 데모에서는 JSFiddle의 Echo service을 사용하여 서버 응답을 시뮬레이트합니다.

+0

를 사용 : 여기에 코드입니다. 필터가 적용될 때 필터는 존재하지 않는 것처럼 값 위로 날아갑니다. 최소한 나를 위해 filters.rules를 초기화하면 Filter.roups에 배치하여 쉽게 해결할 수있는 TypeError를 얻을 수 있습니다. – lynxidngo

+0

@lynidngo : 현재 사용중인 jqGrid의 버전과 jqGrid의 포크는 어느 것입니까? 문제를 일으키는 코드는 어디에 있습니까? 미안 해요,하지만 난 내 대답에 민주당 https://jsfiddle.net/OlegKi/epcz4ptq/ 게시했습니다. 데모가 올바르게 작동합니까? 당신이 당신에게 몇 가지 문제가 있다고 쓰면, 당신은 당신의 코드로 나의 데모를 수정할 수 있고 그것을 저장하고 수정 된 버전의 URL을 게시 할 수 있습니다. – Oleg

+0

"jqGrid 5.2.1"을 사용하고 있습니다. 데모는 잘 작동합니다. 코드 길이가 약 800 줄이기 때문에 코드를 붙여 넣을 때 얼마나 많은 의미가 있는지 모르겠습니다. – lynxidngo

0

모든 데이터 유형 및 모든 설정에 사용할 수있는 다른 솔루션 (Guriddo jqGrid을 사용하는 경우)을 권장 할 수 있습니다. 아이디어는 beforeProcessing 이벤트를 사용하여 필요한 데이터를 필터링하는 것입니다.

이 목적을 위해 우리는 데이터가 당신에게서 설명한 것과 같다고 가정합니다.

$("#grid").jqGrid({ 
... 
     beforeProcessing : function (data, st, xhr) { 

      var test= data.rows.filter(function (row) { 
       if(row.hasData == true) { // true is not needed but for demo 
        return true; 
       } else { 
        return false; 
       } 
      }); 
      data.rows = test; 
      return true; 
     } 
... 
}); 

내가 스크립트가 경우에 무료있는 jqGrid에서 작동한다고 가정하면 "hasData"속성이 포함 된 값을 읽고 싶어하지 않는 몇 가지 이유를 들어이를

+0

귀하의 방법을 시도하고 첫 페이지에 잘 작동합니다. 그러나 다음 페이지로 넘어갈 때 실제 json에는 1000 개가 넘는 객체가 포함되어 있으므로 json 객체는 하나의 예일뿐입니다.로드가 멈추고로드가 처리되지 않습니다. – lynxidngo

+0

서버에서 전체 데이터를 게시 할 수 있습니까? console.log를 사용하여 서버에서 가져온 데이터와 처리 방법을 볼 수 있습니다. –