啸羽程序园
JAVAJavaScriptJquery/Ext/Vue教程学习编程语言项目笔记首页

extjs常见却又恶心的错误 Cannot read property ‘internalId’ of undefined

用ext时候经常遇到这么个错误,报错内容模棱两可,位置更是耐人寻味,浏览器调试很难定位到异常位置,这异常的大概意思就是不能读取未定义的属性“internalId”,但是这个属性在哪里,是什么时候定义的,需要怎样定义?而且有些时候有些语法错误也会报这个错,id重复也会报这个错。遇到这样的问题一定要谨慎小心,可能是渲染时候有些属性未定义就使用了,我遇到最难理解的时候就是在一个store执行load时候报这个错,错误定位到store.load()这行,下意识的寻找这个store的某个属性出问题了?store的model未引用导致找不到某些属性?还是grid界面没有引用store?还是store的id的问题?反复折腾很久未果,突然想起我再render的时候做了一个默认选中的处理,去掉后问题解决。。。

摘抄错误示例代码备忘:

{
xtype : ‘gridpanel’,
region : ‘center’,
columnLines : true,
itemId:’reSelectDataGrid’,
store : reSelectDataStore,
selModel: Ext.create(‘Ext.selection.CheckboxModel’, {
showHeaderCheckbox : true
}),
// listeners : {
// ‘afterlayout’ : function (store ,record){
// me.down(‘#reSelectDataGrid’).getSelectionModel().deselectAll();
// me.down(‘#reSelectDataGrid’).getSelectionModel().select(me.selectedData,true);
// }
// },

columns : [$.rowNumberer(), {
xtype : ‘gridcolumn’,
dataIndex : ‘columnName’,
flex : 1,
text : ‘名称’
}, {
xtype: ‘gridcolumn’,
flex : 1,
sortable : true,
dataIndex : ‘columnTypeName’,
text: ‘类型’,
}]

}

红色部分是load报错的元凶,load的时候触发了 afterlayout事件,但是只是store.load触发这个事件渲染的过程应该不完整导致报错。

有时间一定仔细理解下ext的渲染加载原理。

Hi, I’m shen, 啸羽