2010-12-10 10 views
2

aufrufen Ich habe ein Ext Js Panel, das ich zu meinem Haupt-TabPanel hinzufügen. Das Panel, das ich hinzufüge, enthält ein FormPanel als eines seiner Elemente und innerhalb des FormPanel habe ich ein Name-Feld. Ich möchte den Namen des Tabs anhand des Namens im Formularfeld ändern.Kann nicht getValues ​​() auf einem Ext Js FormPanel bei der Initialisierung eines Containers Panel

Das Problem ist, dass, wenn ich rufe die Formpanel existieren die getForm().getValues() innerhalb der initcomponent des Panels, erhalte ich die folgenden Javascript-Fehler:

Uncaught TypeError: Cannot read property 'dom' of undefined 

Wenn ich diese außerhalb von initcomponent (zB auf einem Tastendruck) alles funktioniert fein. Nach einigen Tests denke ich, das Problem ist, dass das FormPanel noch nicht wirklich gerendert wird (und somit das Dom nicht existiert), schlägt getValues() fehl. Allerdings scheint es mir nicht möglich zu sein, meine FormPanel-Werte beim Laden aus dem Panel zu bekommen.

Ich habe versucht, auf Ereignisse zu hören. Ich habe versucht:

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

aber dies zu tun hat gezeigt, dass AfterRender auf die Form vor genannt wird tatsächlich wiedergegeben wird (es ist nicht sichtbar auf dem Bildschirm). Durch das Ändern der Warnung für meinen benutzerdefinierten Funktionshandler wird die vorherige dom-Ausnahme erstellt. Ich habe versucht, die Ereignisse activate und enable anstelle von afterrender zu verwenden, aber obwohl die API angibt, dass FormPanel diese Ereignisse auslöst, wird die Warnung ("test") nie aufgerufen.

kann ich keine Möglichkeit für meine Platte zu finden scheinen die inneren Formpanel existieren Werte beim Laden meiner Platte zu erhalten. Hat jemand irgendwelche Ideen?

Antwort

3

Mit getFieldValues ​​() anstelle von getValues ​​() werden Werte sammeln, indem jedes Feld Instanz getValue() -Methode aufrufen, anstatt durch aus dem DOM zu lesen. Dies sollte Ihnen ermöglichen, Ihre Werte unabhängig vom gerenderten Zustand des Formulars zu erhalten.

+0

Beide scheinen zu funktionieren, aber ich markiere dies als die Antwort, weil ich denke, dass es besser ist, als sich auf das 'Afterlayout'-Ereignis zu verlassen – KallDrexx

1

ich die gleichen Probleme auf einem meiner Projekte habe, habe ich es geschafft, es zu beheben, um das afterlayout Ereignis verwenden.

0

Ich würde geben .deferredRender: false ein Versuch.

Ext.TabPanel.deferredRender

Wahrscheinlich Beste aus Ihrem Afterlayout Änderungen zu rollen, dann testen Sie mit nur einem geraden deferredRender: false config-Element.

Ich glaube, dass das Problem verursacht wird, weil die inaktiven Registerkarten nicht gerendert werden, bis sie aktiv werden. In Ihrem Szenario können Sie die Werte nicht abrufen, da sie nicht existieren, bis die Registerkarte aktiviert/angezeigt wird.

Einstellung deferredRender: false rendert die Elemente auf allen Registerkarten. Es könnte einen Leistungseinbruch geben, indem Sie deferredRender setzen: false, also müssen Sie testen.

Hoffe, das hilft.