You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用6pac/slickgrid 5.15.1调用autosizeColumns报TypeError求助

问题描述

使用6pac/slickgrid 5.15.1版本及slick.remotemodel.js,在Model的DataLoaded事件中调用grid.autosizeColumns()时触发错误,代码如下:

model.onDataLoaded.subscribe(function(e, args) {
     for (var i = args.from; i <= args.to; ++i) {
         grid.invalidateRow(i);
     }
     grid.updateRowCount();
     grid.render();        
     grid.autosizeColumns();
 });

运行后报错:

Uncaught TypeError: this.getDataItem(...) is undefined
        getRowVal slick.grid.ts:2679
        getColContentSize slick.grid.ts:2745
        getColAutosizeWidth slick.grid.ts:2608
        internalAutosizeColumns slick.grid.ts:2434
        autosizeColumns slick.grid.ts:2386

怀疑是调用时机不正确。

解决方案

错误根源是调用autosizeColumns()时,Grid尚未完成新数据的渲染绑定,导致getDataItem()无法获取有效行数据。可通过以下方式调整调用时机:

  • 延迟调用(推荐简单场景)
    将autosizeColumns()放入setTimeout,让代码延迟到下一个事件循环执行,确保Grid完成渲染:
model.onDataLoaded.subscribe(function(e, args) {
     for (var i = args.from; i <= args.to; ++i) {
         grid.invalidateRow(i);
     }
     grid.updateRowCount();
     grid.render();        
     setTimeout(() => grid.autosizeColumns(), 0);
 });
  • 监听Grid渲染完成事件(适合复杂场景)
    放弃在DataLoaded中直接调用,改为监听Grid的onRendered事件,确保渲染完成后再执行列宽自适应:
model.onDataLoaded.subscribe(function(e, args) {
     for (var i = args.from; i <= args.to; ++i) {
         grid.invalidateRow(i);
     }
     grid.updateRowCount();
     grid.render();        
 });

grid.onRendered.subscribe(function() {
    grid.autosizeColumns();
    // 若只需执行一次,可取消订阅:grid.onRendered.unsubscribe(arguments.callee);
});

注意:如果是分页加载数据,第二种方式会在每次渲染时触发自适应,若不需要重复执行,记得调用后取消订阅该事件。

内容的提问来源于stack exchange,提问作者Sadri Lassoued

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 12:55:09