我们正在使用extjs 3.4。目的是替换Ext.Window中的组件。即使 当我们在尝试doLayout()错误时删除旧组件并添加新组件时没有错误 未捕获的TypeError:无法读取未定义的属性'offsetWidth' 发生。
创建窗口的代码是:
function createWindowConf(id, winconf, items) {
var conf = {
id: id,
title: winconf.title,
iconCls: winconf.icon,
x : winconf.xpos,
y : winconf.ypos,
width : parseInt(winconf.xsize),
height : parseInt(winconf.ysize),
layout : winconf.layout, //'border',
border : false,
resizable : winconf.resizable,
manager: windows,
shadow: false,
closable: true,
items: items
};
var win = new Ext.Window(conf);
win.render(desktopEl);
return win;
};
这些项是Ext.grid.GridPanel和Ext.form.FormPanel。 根据用户当前的握把选择(位置0中的组件),应移除旧表格并添加新表格(位置1中的组件)。
创建表单的代码是:
var theConfig = {
id: config.yid,
bodyStyle: 'padding:5px 5px 0',
width: 370,
maxWidth: 370,//not resizable
minWidth: 370,
layout: 'form',
margins: '0 0 0',
region: 'east',
split: true,
colapsible : true,
trackResetOnLoad: true,
autoScroll: true,
fieldDefaults: {
msgTarget: 'side',
labelWidth: 75
},
items: [],
buttons: [scopeDetails.updateButton, scopeDetails.submitButton]
};
this.detailsForm = new Ext.form.FormPanel(theConfig);
之后添加的项目。
从窗口更新(添加/删除)组件的代码是:
this.updateWin = function(moduleForRemoveId, form, idWin) {
var win = this.getWindow(idWin);
if (win != null) {
win.remove(moduleForRemoveId);
win.add(form);
win.doLayout();
}
}
并在win.doLayout()中产生错误。
删除所有组件并添加新组件:
win.removeAll();
win.add(this.grid);
win.add(this.form);
win.doLayout();
我们有同样的错误。
任何建议都会非常有用,因为错误超过3天
答案 0 :(得分:1)
我很确定错误来自其他内容,而不是组件删除/添加。 我创建了一个简单的testcase,它定义了一个带有表单和网格的窗口,以及一个用面板替换所有内容的按钮。它有效。
您的代码不完整。你应该提供一个完整的例子。 你有没有试过自己调试?在Chrome脚本调试程序上启用“暂停未捕获的例外”可重现该错误。您将获得所发生事件的堆栈跟踪,并提供有关错误的提示。当然包括ext-all-debug。