extjs 3.4 を使用しています。目的は、Ext.Window 内のコンポーネントを置き換えることです。古いコンポーネントを削除して新しいコンポーネントを追加するとエラーが発生しなくても、doLayout() を実行しようとすると Uncaught TypeError: Cannot read property 'offsetWidth' of undefinedというエラー が発生します。
ウィンドウを作成するコードは次のとおりです。
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日以上費やされているので、どんな提案も本当に役に立ちます