一个人怎么能使用服务器端排序和分页与Azure的移动服务一个人怎么能使用服务器端排序和分页与Azur

2019-05-12 11:31发布

我使用的jqGrid(inlineNav)与蔚蓝的服务,并有兴趣学习一个如何使用服务器端排序,并与Azure的移动服务的传呼数据。

请分享解决这个想法。

Answer 1:

Windows Azure的移动服务提供REST API可用于获取/插入/编辑/删除您的相应访问(请参阅配置表的数据文件 )。 查询记录操作请求使用HTTP GET动词。 它支持开放数据协议(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
});

一些评论上面的代码:

  • 我删除sortable: false通过单击列标题,使电网的排序
  • 相对于的prmNames选项可以删除不需要的参数发送到服务器或重命名。 我用prmNames: { search: null, nd: null }否认发送_searchnd选项。 人们可以使用sort: "$orderby", rows: "$top"重命名其他两个参数,而是因为我们需要计算$skip并追加sordsidx我们需要使用serializeGridData 。 所以不需要的情况下其他参数的重新命名。
  • 使用serializeGridData我们构建的将被发送到服务器的选项列表。
  • ajaxGridOptions将被用于设置jQuery.ajax请求的附加参数其中用于访问服务器的jqGrid做内部。 我在示例设置使用的选项Content-Type: application/jsonX-ZUMO-APPLICATION: myKey在HTTP报头
  • 从服务器的响应不包含total (总页面数),所以我们使用beforeProcessing回调基础上,响应将被处理之前的其他信息填写财产。
  • 因为我们使用$inlinecount=allpages选项在URL从服务器会响应包含有关的记录总数和数据将被包裹在的页面信息, results了部分答案。 因此,我们使用jsonReader: {repeatitems: false, root: "results", records: "count"}读取响应。
  • 我们必须删除loadonce: true原因是服务器只返回数据而不是整个数据集的请求的页面选项。


文章来源: How one could use server side sorting and paging with Azure Mobile Services