2013-04-12 4 views

답변

3

Windows Azure 모바일 서비스는 해당 액세스에 대해 구성한 테이블의 데이터를 가져오고/삽입/편집/삭제하는 데 사용할 수있는 REST API를 제공합니다 (the documentation 참조). Query records operation 요청은 HTTP GET 동사를 사용합니다. Open Data Protocol (OData) URI 옵션 $orderby, $skip, $top$inlinecount을 지원하며 jqGrid를 채울 수 있습니다. 위의 코드에

$("#list4").jqGrid({ 
    url : 'https://mohit.azure-mobile.net/tables/Schedules', 
    datatype: "json", 
    height: "auto", 
    colModel: [ 
     { name: "RouteId", width: 50 }, 
     { name: "Area", width: 130 } 
    ], 
    cmTemplate: {editable: true, editrules: { required: true}}, 
    rowList: [10, 20, 30], 
    rowNum: 10, 
    prmNames: { search: null, nd: null }, 
    ajaxGridOptions: { 
     contentType: "application/json", 
     headers: { 
      "X-ZUMO-APPLICATION": "myKey" 
     } 
    }, 
    serializeGridData: function (postData) { 
     if (postData.sidx) { 
      return { 
       $top: postData.rows, 
       $skip: (parseInt(postData.page, 10) - 1) * postData.rows, 
       $orderby: postData.sidx + " " + postData.sord, 
       $inlinecount: "allpages" 
      }; 
     } else { 
      return { 
       $top: postData.rows, 
       $skip: (parseInt(postData.page, 10) - 1) * postData.rows, 
       $inlinecount: "allpages" 
      }; 
     } 
    }, 
    beforeProcessing: function (data, textStatus, jqXHR) { 
     var rows = parseInt($(this).jqGrid("getGridParam", "rowNum"), 10); 
     data.total = Math.ceil(data.count/rows); 
    }, 
    jsonReader: { 
     repeatitems: false, 
     root: "results", 
     records: "count" 
    }, 
    loadError: function (jqXHR, textStatus, errorThrown) { 
     alert('HTTP status code: ' + jqXHR.status + '\n' + 
      'textStatus: ' + textStatus + '\n' + 
      'errorThrown: ' + errorThrown); 
     alert('HTTP message body (jqXHR.responseText): ' + '\n' + jqXHR.responseText); 
    }, 
    pager: "#pager1", 
    sortname: "Area", 
    viewrecords: true, 
    caption: "Schedule Data", 
    gridview: true 
}); 

일부 의견 :

  • 나는 하나가 불필요한 매개 변수를 보내는 제거 할 수 있습니다 prmNames 옵션에 대한 열 머리글
  • 에 클릭하여 격자로 정렬 할 수 있도록 sortable: false을 제거 서버 또는 이름을 바꿉니다. 및 nd 옵션의 전송을 거부하려면 prmNames: { search: null, nd: null }을 사용했습니다. sort: "$orderby", rows: "$top"을 사용하여 다른 두 개의 매개 변수의 이름을 바꿀 수 있지만 을 계산하고 sidx 뒤에 sord을 추가해야하므로 serializeGridData을 사용해야합니다. 따라서 다른 매개 변수의 이름을 바꿀 필요가 없습니다.
  • serializeGridData을 사용하여 서버에 보낼 옵션 목록을 구성합니다.
  • ajaxGridOptions은 jqGrid를 서버에 액세스하기 위해 내부적으로 수행하는 jQuery.ajax 요청의 추가 매개 변수를 설정하는 데 사용됩니다. 내가 예에서 사용하는 옵션은 HTTP 헤더에 Content-Type: application/jsonX-ZUMO-APPLICATION: myKey을 설정
  • 서버의 응답하지 total (총 페이지 수)를 포함, 그래서 우리는 다른 정보를 기반으로 속성을 채우기 위해 beforeProcessing 콜백을 사용합니까 전에 응답이 처리됩니다.
  • URL에 $inlinecount=allpages 옵션을 사용했기 때문에 서버의 응답에는 총 레코드 수에 대한 정보가 포함되어 있으며 데이터 페이지는 답변의 results 부분에 래핑됩니다. 따라서 우리는 jsonReader: {repeatitems: false, root: "results", records: "count"}을 사용하여 응답을 읽습니다.
  • 서버가 전체 데이터 집합 대신 요청 된 데이터 페이지 만 반환하기 때문에 loadonce: true 옵션을 제거해야합니다.
+0

이와 같은 자세한 버전을 공유해 주셔서 감사합니다. 나는 코드를 살펴볼 것이다. "$ orderby : postData.sidx +" "+ postData.sord"와 관련된 문제가 있습니다. 이것을 사용하면 그리드의 데이터가로드되지 않으므로 "orderby = + asc"가 표시됩니다. "prmNames"에 "sidx"를 정의해야한다고 생각합니다. 나는 똑같이 시도했지만 효과가 없었다. – Mohit

+0

내 마음에 또 다른 질문 : 어느 쪽이 더 낫습니다 : 페이지 당 데이터를 가져 오는 것 (현재 한 것처럼) 또는 모든 데이터를 한 번 가져 와서 여러 서버 왕복을 피하십시오? – Mohit

+0

@Mohit : 죄송합니다. 게시 한 코드로 작업 테스트를 한 번 더 확인했는데 차이점을 볼 수 없었습니다. 나는 당신이 실제로'prmNames : {search : null, nd : null}'을 사용하는지, 그리고 내가 게시 한 코드로'serializeGridData' *를 한 번 * 정의했는지 확인할 것을 권한다. 개발자 도구를 F12로 시작하고'serializeGridData'의 첫 번째 줄에 중단 점을 설정하고 디버깅을 시작할 수 있습니다. 'postData'의 모든 속성을 확인할 수 있습니다.수정 된 데모가 포함 된 이메일을 이메일별로 게시 할 수도 있습니다. – Oleg

관련 문제