【问题标题】:Why Kendo datasource functions is not called?为什么不调用 Kendo 数据源函数?
【发布时间】:2020-03-27 18:22:10
【问题描述】:

我正在尝试将返回的数据从数据源绑定到网格,但问题是我的数据源函数没有被调用...

transactionHistoryGridDS: new kendo.data.DataSource({
    error: function () {
        alert("erroe")
    },
    complete: function () {
        alert("completed")
    },
    success: function () {
        alert("success");
    },
    transport: {
        read: {
            dataType: "json",
            type: 'POST',
            url: args.TransactionHistoryUrl,
            data: {
                id: function () {return vm.transactionHistoryParams.id },
                originBranch: function () {return vm.transactionHistoryParams.originBranch },
                take: function () {return vm.transactionHistoryParams.take },
                skip: function () {return vm.transactionHistoryParams.skip }
            }
        },
        schema: {
            parse: function (data) {
                alert("hey...")
                return data;
            },
            data: "data",
            total: "total",
        },
        pageSize: 20,
        serverPaging: false
    }
}),

当我通过下面的代码调用读取数据源时

 vm.transactionHistoryGridDS.read();

Ajax请求被调用,服务器成功返回数据,但没有调用successerrorcompleteparse等函数 因此,数据不会绑定到网格。

【问题讨论】:

    标签: javascript kendo-ui kendo-grid


    【解决方案1】:

    我可以看到一些需要修复的错误,然后您的网格才能正常工作。

    首先,schemapageSizeserverPaging 的缩进级别错误,应该与transport 不在其中。

    transport: {...},
    schema: {...},
    serverPaging: ...,
    pageSize: ...
    

    每个网格都应该有dataSource属性,read会被自动调用并填充数据,你不需要将数据设置为网格或调用read()函数:

    $('#grid').kendoGrid({
        dataSource: {
            transport: {
                read: {...}
            }
        }
    });
    

    在您的情况下,我假设 vm 是一个网格,因此您需要设置 dataSource:transactionHistoryGridDS, 检查下面的示例链接

    如果您需要通过请求发送数据,请使用parameterMap:

    $('#grid').kendoGrid({
        resizable: true,
        filterable: true,
        sortable: true,
        pageable: {
            pageSize: 10,
            refresh: true,
            pageSizes: [5, 10, 20, 100, 500, 1000]
        },
        dataSource: {
            pageSize: 10,
            serverPaging: true,
            serverFiltering: true,
            transport: {
                read: {
                    url: 'url',
                    type: 'POST',
                    dataType: 'JSON',
                    contentType: 'application/json'
                },
                update: {...},
                destroy: {...},
                parameterMap(data, type) {
                    switch (type) {
                        case 'read':
                            let request = {};
                            request.page = data.page - 1;
                            request.page_size = data.pageSize;
                            request.sort = data.sort;
                            request.filter = data.filter;
    
                            return JSON.stringify(request);
                        case 'destroy':
                            return kendo.stringify(data);
                        default:
                            break;
                    }
                }
            }
        }
    });
    

    有两种方法可以从 kendo dataSource 请求中获取数据,第一种是在请求和响应完成时调用 complete 函数。第二个是对每个数据源请求的承诺。

    第一个例子:complete call

    第二个例子:promise call

    【讨论】:

      猜你喜欢
      • 2022-08-03
      • 1970-01-01
      • 1970-01-01
      • 2016-12-03
      • 2019-09-02
      • 2017-05-29
      • 2015-08-04
      • 2015-12-10
      • 2021-10-08
      相关资源
      最近更新 更多