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

ExtJS Grid获取选中记录报错Uncaught TypeError: grid.getSelectionModel is not a function的解决方法

解决ExtJS中grid.getSelectionModel is not a function错误的方法

你踩的这个坑其实很典型——咱们先把问题根因说透:this.getMeasuries()拿到的是整个Window组件(毕竟你的alias: 'widget.measuries'绑定的是Ext.window.Window),而getSelectionModel()是Grid组件独有的方法,Window当然没有这个方法,所以报错是必然的。

下面给你几个靠谱的解决方案,选一个适合你的就行:

方案1:从Window中直接查找内部Grid

这是最快的修改方式,不需要改动视图代码,只调整控制器逻辑:

editMeasuries: function() { 
    // 先拿到Window组件
    var measuriesWindow = this.getMeasuries(); 
    // 通过down()方法查找Window内的Grid组件
    var grid = measuriesWindow.down('grid'); 
    
    console.log(grid); 
    // 先判断Grid是否存在,避免空指针
    if(grid){
        var rec = grid.getSelectionModel().getLastSelected(); 
        if ( rec ) { 
            var view = Ext.widget( 'measuries-edit' ); 
            view.down( 'form' ).loadRecord( rec ); 
        }
    }
},

如果想更精准(比如Window里有多个Grid的情况),可以给视图里的Grid加个itemId:

// 视图中的Grid配置新增itemId
xtype: 'grid', 
itemId: 'measuriesGrid',
// ...其他配置不变

然后控制器里改成var grid = measuriesWindow.down('#measuriesGrid');,这样就不会找错Grid了。

方案2:给Grid配置合法别名,直接获取

你之前给Grid设别名报错,是因为格式不对——ExtJS的widget别名必须以widget.开头。修改视图里的Grid配置:

xtype: 'grid', 
alias: 'widget.measuries-grid', // 正确的别名格式
// ...其他配置不变

然后控制器里可以通过Window来查找这个别名对应的组件:

editMeasuries: function() { 
    var measuriesWindow = this.getMeasuries(); 
    var grid = measuriesWindow.down('widget.measuries-grid');
    // 后续逻辑和方案1一致
},

方案3:用Reference关联Grid(推荐)

这是ExtJS MVC模式下更规范的做法,给Grid加reference属性:

// 视图中的Grid配置
xtype: 'grid', 
reference: 'measuriesGrid',
// ...其他配置不变

然后控制器里用lookupReference直接获取Grid:

editMeasuries: function() { 
    var grid = this.lookupReference('measuriesGrid');
    console.log(grid); 
    if(grid){
        var rec = grid.getSelectionModel().getLastSelected(); 
        if ( rec ) { 
            var view = Ext.widget( 'measuries-edit' ); 
            view.down( 'form' ).loadRecord( rec ); 
        }
    }
},

这种方式更符合ExtJS的组件引用规范,维护起来也更清晰。

不管选哪种方案,核心都是确保你调用getSelectionModel()的对象是Grid组件,而不是它的父容器Window。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 07:24:06