!!!###!!!title=异步懒加载数据——VisActor/VTable 教程文档!!!###!!!!!!###!!!description=为了减轻后端请求数据的压力,建议使用异步懒加载数据。!!!###!!!

异步懒加载数据

为了减轻后端请求数据的压力,建议使用异步懒加载数据。

基本使用

需要自定义一个VTable.data.CachedDataSource数据源实例。实例参数中设置好get方法,该方法接受一个索引参数,返回一个Promise,resolve时返回数据。

const loadedData = {}; // 缓存已请求批次数据
const dataSource = new VTable.data.CachedDataSource({
    get(index) {
      // 每一批次请求100条数据 0-99 100-199 200-299
      const loadStartIndex = Math.floor(index / 100) * 100;
      // 判断是否已请求过?
      if (!loadedData[loadStartIndex]) {
        const promiseObject = getRecordsWithAjax(loadStartIndex, 100); // return Promise Object
        loadedData[loadStartIndex] = promiseObject;
      }
      return loadedData[loadStartIndex].then((data) => {
        return data[index - loadStartIndex]; //获取批次数据列表中的index对应数据
      });
    },
    length: 10000 //all records count
  });

局限性

  • 如果使用VTable内部排序的话,需要获取到全部数据才能排序,所以这个异步相当于失效,建议后端实现排序逻辑,前端仅展示排序图标。

  • 如果开启自动列宽widthMode:'autoWidth'或者columns中设置了width:'auto', VTable也需要获取到列每个单元格的值才能取到最大内容宽度,所以也会导致异步失效。

  • 目前如果双击列间隔线,会有计算列宽的逻辑,会导致请求所有数据,可以配置resize.disableDblclickAutoResizeColWidth为true。

  • 如果右键到表头,会选中整列,同时右键事件会组织所有选中cells信息,也会导致请求所有数据,所以需要配置eventOptions.contextmenuReturnAllSelectedCells为false。

demo

可参考demo