2013-02-26 5 views
8

Ho un Ext.form.Panel all'interno di Ext.window. L'altezza della forma è maggiore dell'altezza della finestra, quindi ho una scroll verticale sulla finestra.Evita lo scorrimento di convalida di Ext.form all'inizio

Nella convalida dei campi modulo (su evento validitychange), si scorre verso l'alto.

Come evitare questo comportamento?

risposta

1

ho lo stesso problema :(

Ho fatto una soluzione raccapricciante (funziona al 80%) A volte salta ancora al top. Si deve sapere, che ho una finestra con un layout di ' modulo '. Se si dispone di una finestra con (ad esempio) un layout di' fit 'con un xtype di' form '- potrebbe essere necessario modificare leggermente il codice. Ad esempio la riga el.child (". x-window-corpo", Fasle) non avrebbe funzionato.

init: function() {    
    this.control({ 

      ... 

     /** My Ext.window.Window is called reservationwindow **/ 
     'reservationwindow': { 
      afterrender: function(comp) { 
       // comp is this Ext.Component == wrapper 
       var el = comp.getEl(); 
       //extjs adds the scrollbar to the body element... 
       var elForm = el.child(".x-window-body", false); 
       // or el.child(".x-panel-body", false); 

       //we are listinig to the scroll-event now 
       this.myFormEl = elForm; 
        this.safeScroll = {top:0, left:0}; 
       elForm.on('scroll', function() { 
        console.log("save"); 

        this.safeScroll = this.myFormEl.getScroll(); 
       }, this); 
       elForm.on('click', function() { 
        var resWin = this.getResWin(); 
        resWin.scrollBy(0,this.safeScroll.top,false); 
        console.log("reset"); 
       }, this); 
       elForm.on('keyup', function() { 
        var resWin = this.getResWin(); 
        resWin.scrollBy(0, this.safeScroll.top, false); 
        console.log("reset"); 
       }, this); 
      } 

Come potete vedere, sto ascoltando il rotolo-evento e sicuro e ripristinare la barra di scorrimento. A volte (specialmente se stai scrivendo molto velocemente in una casella di testo) gli eventi arrivano in un ordine diverso e la pagina salterà comunque in alto. A volte lo vedi anche sfarfallare (se ha bisogno di troppo tempo per riportarlo alla posizione originale).

Quindi ... Come ho detto, è una soluzione raccapricciante. Se trovi una soluzione migliore, faccelo sapere.

EDIT

ho anche capito, che il crescono opzione su un textareafield stato uno dei facinorosi.

{ 
    id: this.id + '-details', 
    xtype: 'textareafield', 
// grow: true,  now it isn't jumping 
    name: 'message', 
    fieldLabel: 'Zusätzliche Informationen', 
    labelAlign: 'top', 
    renderder: 'htmlEncode', 
    disabled: isDisabled, 
    anchor: '100%' 
} 
2

Ho cercato di capire perché una delle mie forme è stata visualizzata e altre no. È venuto fuori che ho dimenticato di specificare esplicitamente il gestore di layout e che il gestore di layout predefinito (ancora) scorreva in alto sulla modifica della validità, mentre il layout vbox no. Mentre tutto sembrava identico (vbox con align: 'stretch'), si comportava in modo diverso quando l'errore era mostrato o nascosto.

+0

grazie, funziona per me. Basta cambiare il layout in "vbox". – wengeezhang

Problemi correlati