设置datasource.transport.read功能时如何设置Kendo格总计?

How to set Kendo Grid total when datasource.transport.read is set to function?

Kendo version: ^2019.3.1023

假设我有一个如下所示的数据源,其中 read prop 设置为一个函数,并且返回的数据用于 Kendo Grid.

向 XHR function/method 的 success 回调传递了一个对象,该对象包含一个“页面”(作为分页查询结果一部分的对象数组),以及总结果计数查询(所有“页面”上的记录数)。

<script>
var dataSource = new kendo.data.DataSource({
  transport: {
    read: function(options) {
      // make JSONP request to https://demos.telerik.com/kendo-ui/service/products
      $.ajax({
        url: "https://demos.telerik.com/kendo-ui/service/products",
        dataType: "jsonp", // "jsonp" is required for cross-domain requests; use "json" for same-domain requests
        success: function(result) {
          // notify the data source that the request succeeded
          options.success(result);
        },
        error: function(result) {
          // notify the data source that the request failed
          options.error(result);
        }
      });
    }
  }
});
dataSource.fetch(function() {
  console.log(dataSource.view().length); // displays "77"
});
</script>

如何设置网格总数?

我尝试使用 TypeScript getter 在 schema 中设置它,如下所示,但这不起作用。

{ schema: { total: this.paginatedRecordsCount }}

我还在 <kendo-datasource><kendo-grid> 中尝试了 :total="total",其中 total 又是 TypeScript getter,类似于 this example,但是没有效果(即使我硬编码值)。

我找到了这个类型定义,但没有用:

interface DataSourceTransportOptions {
    success: (data?: any) => void;
    error: (error?: any) => void;
    data: any;
}

这是 options.success 在运行时的主体:

function(data) {
    that._ranges = [];
    that.success(data, params);

    deferred.resolve();
}

paginatedTransactionsCount 是 TypeScript getter.

时,在 schema 中设置 total 无效
total: this.paginatedRecordsCount

事实证明,您可以使用闭包从处理 XHR 的方法的成功回调(在我的例子中为 Axios.post)访问包装器对象(包含 count),以便回调可以通过下面的 schema.total 属性 以网格“可见”的方式更新 count 道具。

total: () => this.paginatedRecordsCountWrapper.count