如何处理 ExtJs 中的异常 "cannot call method getRange of null"?
How can I handle the exception "cannot call method getRange of null" in ExtJs?
我在网上搜索了答案,但没有找到任何答案。希望你能帮忙。
所以我是 extJs
的新手。我在左边有一个导航栏。当我按下那里的第一个按钮时,一个新的 window 打开,其中包含一个 table 并自动加载它的数据。第一次它运行完美,但当我关闭 window 并再次打开它时,我收到错误 "cannot call method getRange of null"。
如果我打开第二个 window(当我单击导航栏中的另一个按钮时),我有 4 个选项卡,每个选项卡包含一个 table。每个选项卡都有一个带有按钮(创建、更改等)的工具栏。这里发生了与第一个 window 相同的事情。
我也可以将那些 tables 作为列表打印,第一次工作正常,但是当我取消打印操作时,我再次收到错误。
我确保所有按钮和 table 都有不同的参考,所以我真的不知道这是什么。
有什么想法吗?
我添加我的面板,这将在此处打开新的 windows:
items: [
{
xtype: 'tabpanel',
region: 'center',
items: [{
// 1. Tab
xtype: 'componentTap-panel',
title: UMA.Locale.rm.component.componentTitle,
id: 'componentTab'
}, {
// 2. Tab
title: UMA.Locale.rm.componentGroup.componentGroupTitle,
xtype: 'componentGroupTap-panel',
id: 'componentGroupTab'
}, {
// 3. Tab
title: UMA.Locale.rm.componentTemplateTitle,
xtype: 'componentTamplate-panel',
id: 'componentTemplateTab'
},
{
//4.Tab
title: UMA.Locale.rm.inventoryTitle,
xtype: 'inventoryTab-panel',
id: 'inventoryTab'
}
]
}
]
当 window 打开时,我添加我的 table 和工具栏:
items: [{
xtype: 'toolbar',
region: 'north',
reference: 'componentToolbar',
items: [{
text: UMA.Locale.rm.buttonCreate,
action: 'createComp'
}, {
text: UMA.Locale.rm.buttonChange,
action: 'changeComp'
}, {
text: UMA.Locale.rm.buttonMove,
action: 'moveComp'
}, {
text: UMA.Locale.rm.buttonDelete,
action: 'deleteComp'
},{
text: UMA.Locale.rm.buttonPrint,
action: 'print',
margin: {
left: 8
}, {
xtype: 'componentTable-panel',
region: 'center'
}, {
xtype: 'componentsFilter-panel',
width: 300,
region: 'east'
}]
然后自动加载我的 table:
items:[{
xtype: 'filtergrid',
reference: 'componentGrid',
paging: true,
hideHeaders: false,
region: 'center',
selModel: new Ext.selection.RowModel({
mode: "MULTI"
}),
store: {
model: 'Component',
autoLoad: true
},
columns: [{ ...
使用Object()
构造函数来测试对象是否是三种子类型之一:
- 空对象
- 对象对象
- 数组对象
例如:
function foo() { return {"hi":"bye" } }
function bar() { return null }
function baz() { return [1,2,3] }
function testObject(myObject)
{
if (Object(myObject).hasOwnProperty("0") )
{
/* Call getRange */
return 'yes';
}
else
{
/* throw an exception */
return 'no';
}
}
console.log(testObject(foo()), testObject(bar()), testObject(baz()) );
正如 Sergey Novikov 提到的,getRange()
是一种存储方法。
我的网格存储也遇到了同样的错误,经过一次又一次的审查,我发现每当我关闭选项卡并再次重新打开它时,我都会得到网格视图的两个实例(可以通过 grid.getView()
检查)和然后我得出一个结论,每当网格第二次创建时,网格视图的选择模型就有两个实例,因为我将 selModel
的代码用作 new Ext.selection.CheckboxModel({
showHeaderCheckbox: true,
width: 50,
mode: 'MULTI'
})
然后我将 selModel
的代码更改为
selModel: {
selType: 'checkboxmodel',
showHeaderCheckbox: true,
width: 50,
mode: 'MULTI'
}
我的错误消失了。
希望这会帮助你。 :)
我在网上搜索了答案,但没有找到任何答案。希望你能帮忙。
所以我是 extJs
的新手。我在左边有一个导航栏。当我按下那里的第一个按钮时,一个新的 window 打开,其中包含一个 table 并自动加载它的数据。第一次它运行完美,但当我关闭 window 并再次打开它时,我收到错误 "cannot call method getRange of null"。
如果我打开第二个 window(当我单击导航栏中的另一个按钮时),我有 4 个选项卡,每个选项卡包含一个 table。每个选项卡都有一个带有按钮(创建、更改等)的工具栏。这里发生了与第一个 window 相同的事情。 我也可以将那些 tables 作为列表打印,第一次工作正常,但是当我取消打印操作时,我再次收到错误。
我确保所有按钮和 table 都有不同的参考,所以我真的不知道这是什么。
有什么想法吗?
我添加我的面板,这将在此处打开新的 windows:
items: [
{
xtype: 'tabpanel',
region: 'center',
items: [{
// 1. Tab
xtype: 'componentTap-panel',
title: UMA.Locale.rm.component.componentTitle,
id: 'componentTab'
}, {
// 2. Tab
title: UMA.Locale.rm.componentGroup.componentGroupTitle,
xtype: 'componentGroupTap-panel',
id: 'componentGroupTab'
}, {
// 3. Tab
title: UMA.Locale.rm.componentTemplateTitle,
xtype: 'componentTamplate-panel',
id: 'componentTemplateTab'
},
{
//4.Tab
title: UMA.Locale.rm.inventoryTitle,
xtype: 'inventoryTab-panel',
id: 'inventoryTab'
}
]
}
]
当 window 打开时,我添加我的 table 和工具栏:
items: [{
xtype: 'toolbar',
region: 'north',
reference: 'componentToolbar',
items: [{
text: UMA.Locale.rm.buttonCreate,
action: 'createComp'
}, {
text: UMA.Locale.rm.buttonChange,
action: 'changeComp'
}, {
text: UMA.Locale.rm.buttonMove,
action: 'moveComp'
}, {
text: UMA.Locale.rm.buttonDelete,
action: 'deleteComp'
},{
text: UMA.Locale.rm.buttonPrint,
action: 'print',
margin: {
left: 8
}, {
xtype: 'componentTable-panel',
region: 'center'
}, {
xtype: 'componentsFilter-panel',
width: 300,
region: 'east'
}]
然后自动加载我的 table:
items:[{
xtype: 'filtergrid',
reference: 'componentGrid',
paging: true,
hideHeaders: false,
region: 'center',
selModel: new Ext.selection.RowModel({
mode: "MULTI"
}),
store: {
model: 'Component',
autoLoad: true
},
columns: [{ ...
使用Object()
构造函数来测试对象是否是三种子类型之一:
- 空对象
- 对象对象
- 数组对象
例如:
function foo() { return {"hi":"bye" } }
function bar() { return null }
function baz() { return [1,2,3] }
function testObject(myObject)
{
if (Object(myObject).hasOwnProperty("0") )
{
/* Call getRange */
return 'yes';
}
else
{
/* throw an exception */
return 'no';
}
}
console.log(testObject(foo()), testObject(bar()), testObject(baz()) );
正如 Sergey Novikov 提到的,getRange()
是一种存储方法。
我的网格存储也遇到了同样的错误,经过一次又一次的审查,我发现每当我关闭选项卡并再次重新打开它时,我都会得到网格视图的两个实例(可以通过 grid.getView()
检查)和然后我得出一个结论,每当网格第二次创建时,网格视图的选择模型就有两个实例,因为我将 selModel
的代码用作 new Ext.selection.CheckboxModel({
showHeaderCheckbox: true,
width: 50,
mode: 'MULTI'
})
然后我将 selModel
的代码更改为
selModel: {
selType: 'checkboxmodel',
showHeaderCheckbox: true,
width: 50,
mode: 'MULTI'
}
我的错误消失了。 希望这会帮助你。 :)