3

メインのTabPanelに追加するExtJsパネルがあります。追加するパネルには、そのアイテムの1つとしてFormPanelが含まれており、FormPanel内に[名前]フィールドがあります。私がやりたいのは、フォームフィールドの名前に基づいてタブの名前を変更することです。

問題はgetForm().getValues()、パネルのinitComponent内でFormPanelを呼び出すと、次のjavascriptエラーが発生することです。

Uncaught TypeError: Cannot read property 'dom' of undefined

initComponentの外でこれを行うと(ボタンを押すなど)、すべてが正常に機能します。いくつかのテストを行った後、問題は、FormPanelが実際にはまだレンダリングされていない(したがって、domが存在しない)ということだと思いgetValues()ます。ただし、ロード時にPanelからFormPanelの値を取得する方法がわからないようです。

イベントを聴いてみました。私は試した:

this.detailForm.on('afterrender', function () { alert('test'); });

しかし、これを行うAfterRenderと、フォームが実際にレンダリングされる前に呼び出されることがわかりました(画面には表示されません)。アラートをカスタム関数ハンドラーに変更すると、前のdom例外が生成されます。activateの代わりにandenableイベントを使用しようとしましたafterrenderが、APIがFormPanelがこれらのイベントを発生させると言っていても、alert('test')が呼び出されることはありません。

パネルを読み込んだときに、パネルが内部のFormPanelの値を取得する方法が見つからないようです。誰かアイデアはありますか?

4

3 に答える 3

3

getValues()の代わりにgetFieldValues()を使用すると、DOMから読み取るのではなく、各フィールドインスタンスのgetValue()メソッドを呼び出すことによって値が収集されます。これにより、フォームのレンダリング状態に関係なく、値を取得できるようになります。

于 2010-12-10T05:19:54.000 に答える
1

プロジェクトの1つで同じ問題が発生し、afterlayoutイベントを使用して問題を修正することができました。

于 2010-12-10T05:24:18.117 に答える
0

.deferredRender:falseの設定を試してみます。

Ext.TabPanel.deferredRender

おそらく、レイアウト後の変更をロールアウトしてから、単純なdeferredRender:false構成アイテムでテストするのが最善でしょう。

非アクティブなタブはアクティブになるまでレンダリングされないため、問題が発生していると思います。シナリオでは、タブがアクティブ化/表示されるまで値が存在しないため、値を取得できません。

deferredRender:falseを設定すると、すべてのタブ内のアイテムがレンダリングされます。deferredRender:falseを設定するとパフォーマンスが低下する可能性があるため、テストを行う必要があります。

お役に立てれば。

于 2010-12-11T19:01:59.557 に答える