为什么 Kendo 数据源函数没有被调用?

Why Kendo datasource functions is not called?

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

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 的功能叫做 因此,数据未绑定到网格。

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

首先,schemapageSizeserverPaging 的缩进级别错误,它应该与 transport 处于同一级别而不是在其中。

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

每个网格都应该有数据源属性,会自动调用读取并填充数据,您不需要将数据设置到网格或调用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