0

我是 javascript 的新手。我正在使用 jsGrid 插件在浏览器中显示网格。网格列标题将具有值“请求状态”和“请求 ID”。我可以让它与静态数据一起工作。

(function() {
    var adminDashboardController = {
        loadData: function(filter) {
            return $.grep(this.requests, function(request) {
                return (!filter.Status || request.Status === filter.Status)
                && (!filter.RequestId || request.RequestId.indexOf(filter.RequestId) > -1)
            });
        },

        insertItem: function(insertingReq) {
        },

        updateItem: function(updatingReq) { 
        },

        deleteItem: function(deletingReq) {
        }
    };

    window.adminDashboardController = adminDashboardController;

    adminDashboardController.status = [
        { Name: ""},
        { Name: "Requested"},
        { Name: "Declined"}
    ];

    //This is the static data
    adminDashboardController.requests = [
        { "Status": "Requested", "RequestId": "1"},
        { "Status": "Declined", "RequestId": "2"}
    ];
}());

但是在从 ajax 调用中获取数据(使用 json 文件作为数据源进行测试)时,当我选择“已请求”或“已拒绝”作为过滤条件时,数据不再被过滤。我正在使用这样的文档中提到的格式 -

(function() {
    var adminDashboardController = {
        loadData: function (filter) {
            return $.ajax({
                type: "GET",
                dataType: "json",
                url: "/json/db514.json",
                data: filter
            });
        },
        insertItem: function(insertingReq) {
        },

        updateItem: function(updatingReq) { 
        },

        deleteItem: function(deletingReq) {
        }
    };

    adminDashboardController.status = [
        { Name: ""},
        { Name: "Requested"},
        { Name: "Declined"}
    ];
}());

在这种情况下,我无法理解如何实现过滤!

4

1 回答 1

0

原因是过滤应该在代码中实现。

一般来说可以这样做:

  1. 在客户端上(就像在您的第一个示例中一样)
  2. 在后端,您必须将过滤器传递给您的端点,该端点将进行过滤并返回数据。
  3. 组合方法(部分在后端,之后在客户端)

在您的情况下,您可以在后端添加一个端点,它将加载 json 和过滤数据,或者仍然在客户端进行过滤,例如:

loadData: function (filter) {
    return $.ajax({
        type: "GET",
        dataType: "json",
        url: "/json/db514.json"
    }).then(function(requests) {
        return $.grep(requests, function(request) {
            return (!filter.Status || request.Status === filter.Status)
            && (!filter.RequestId || request.RequestId.indexOf(filter.RequestId) > -1)
        });
    });
}

在 GtiHub https://github.com/tabalinas/jsgrid/issues/32上查看此问题。

于 2016-11-27T15:09:10.643 回答