如何:使用JsGrid进行服务器端过滤

时间:2019-04-06 13:55:49

标签: jsgrid

我是JsGrid的新手。我当前正在使用JsGrid配置的“ data”属性通过Ajax调用加载数据。但是,我想允许用户过滤数据。我知道可以在客户端或服务器端完成。我没有偏好,但是如果我使用服务器端,则看起来我需要“控制器”并实现“ loadData”功能。但是,我看到的代码将“ loadData”函数的“ filter”参数发送到$ .ajax()调用的“ data”属性。

我的API使用Node.js(Express&Body-Parser)编写;我可以从我的API中收到什么?这将是一个JSON文档,其中包含用户在文本框中输入的所有过滤值的field:value对吗?如果是这样,我想我需要将这些值发送到我的存储过程中(使用Tedious)?

我知道,听起来很明显,但是在我开始那条路之前,我想确保我朝着正确的方向前进。

谢谢!

这是我的原型代码(尚未执行):

    var db = {
        loadData: (filter)=>{
            $.ajax({
                type: 'GET',
                    url: '/kudosapi/report?member=1',
                    data: filter,
                    dataType: 'json',
                    error: (xhr,status,error)=>{
                        errorHandler(xhr,status,error);
                    },
                    success: (data)=>{
                        // Load grid
                    }
            });
        }
    }

1 个答案:

答案 0 :(得分:0)

要使其在服务器端工作,您需要实现pageLoading: truepageIndex: n,并返回数据及其长度。

这是我如何解决它的一个例子

$("#my-table").jsGrid({
          width: "100%",
          filtering: true,
          inserting: false,
          editing: false,
          sorting: true,
          paging: true,
          pageSize: 4,
          autoload: true,
          pageLoading: true,
          pageIndex: 1,
          controller: {
            loadData: function (filter) {
              var d = $.Deferred();
              var url = "your url";
              $.ajax({
                type: "GET",
                url: url,
                dataType: "json",
                data: filter
              }).done(function (response) {
                 d.resolve(response);
              });

              return d.promise().then(function(data) {
                var startIndex = (filter.pageIndex - 1) * filter.pageSize;
                return {
                      data: data(startIndex, startIndex + filter.pageSize),
                      itemsCount: data
                };
             });

            }

          },

          fields: []
});