0

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日以上費やされているので、どんな提案も本当に役に立ちます

4

1 に答える 1

1

エラーは、コンポーネントの削除/追加ではなく、他の何かから発生していると確信しています。フォームとグリッドを含むウィンドウと、すべてをパネルに置き換えるボタンを定義する簡単なテストケースを作成しました。そして、それは機能します。

あなたのコードは不完全です。完全な例を提供する必要があります。自分でデバッグしようとしましたか?Chrome スクリプト デバッガーで「キャッチされない例外で一時停止」を有効にして、バグを再現します。何が起こったのかのスタック トレースが得られ、何が問題なのかのヒントが得られます。もちろん、ext-all-debug も含めてください。

于 2013-01-05T11:32:06.517 に答える