2011-10-13 9 views
5

Ho una griglia associata a un modulo che l'azione di invio moduli è quella di aggiornare il record caricato se ce n'è uno e aggiungere un nuovo record se è un modulo vuoto. ma se seleziono un disco e poi chiamareIl modulo extjs 4 ha ancora il record impostato dopo form.reset();

myGrid.getSelectionModel().deselectAll(); 
myform.getForm().reset(); 

per cancellare il modulo così posso aggiungere un nuovo record sovrascrive il record selezionato con un aggiornamento.

record = myform.getRecord(); 
if(record){ 
record.set(values); 
} 

non dovrebbe myform.getRecord(); essere nullo dopo un reset? come si cancella la selezione del record?

+0

possibile duplicato del [Ripristina modulo Record non Cancellazione Valori - ExtJS 4.2] (http://stackoverflow.com/questions/18988727/reset-form-record-not-clearing-values-extjs -4-2) –

risposta

3

In breve, no, non dovrebbe e non si dispone di approcci legali per cancellare il record dopo il primo caricamento di qualsiasi cosa tramite loadRecord.
Sebbene si possa ancora eseguire l'assegnazione myform.getForm()._record = null, mi oppongo fermamente a questo, poiché potrebbe interrompere alcune funzionalità interne di ExtJS.

Ecco un estratto da ExtJS API:

GetRecord(): Ext.data.Model
Restituisce l'ultima istanza Ext.data.Model che è stato caricato tramite loadRecord

E fa esattamente questo, restituisce l'ultimo record caricato tramite loadRecord.

Ecco alcune fonti:

getRecord: function() { 
    return this._record; 
}, 

loadRecord: function(record) { 
    this._record = record; 
    return this.setValues(record.data); 
}, 

In realtà, questi sono gli unici metodi di Ext.form.Basic (un'istanza che viene restituito dalla getForm()) trattare con this._record campo.

quanto per il reset

reset: function() { 
    var me = this; 
    me.batchLayouts(function() { 
     me.getFields().each(function(f) { 
      f.reset(); 
     }); 
    }); 
    return me; 
}, 

Come si può vedere, il reset non ha nulla a che fare con il record restituito da getRecord(), è solo il ripristino valori di campo.

+0

Grazie per la spiegazione! Ho aggiunto invece un campo nascosto per il recordID e ho verificato il tipo di invio che ho, indipendentemente dal fatto che il campo ID sia impostato o meno. – Early73

+0

Questo non è più valido. Guarda le risposte alla domanda http://stackoverflow.com/questions/18988727/reset-form-record-not-clearing-values-extjs-4-2 –

0

trovo questa domanda perché non ho uno scenario simile, ma leggermente diversa:

  • ExtJS 4.1.1
  • TreePanel

In ExtJS 4.1 in sincronia() il metodo è possibile utilizzare un oggetto opzioni in cui è possibile definire funzioni di callback, success e failure. Dal momento che sono sicuro che sto solo synchronozing solo un record, ho caricato il record restituito:

me.getHelpItemsStore().sync({ 
    success: function(batch) { 
     // We expect single operation so... 
     var record = batch.operations[0].getRecords()[0]; 
     form.loadRecord(record); 
    } 
}); 

po 'tardi, ma la speranza ti aiuta.

2

Per chiunque sia interessato, è possibile sovrascrivere il pannello modulo predefinito per aggiungere funzionalità per cancellare i campi modulo.Aggiungere la seguente al codice:

 Ext.override(Ext.form.Panel, { 
     clearForm:function(){ 
      Ext.each(this.getForm().getFields().items, function(field){ 
        field.setValue(''); 
      }); 
     } 
    }); 

si può quindi cancellare un modulo utilizzando:

myForm.clearForm()

Dove myForm è il vostro pannello formato.

2

questo è quello che cerca:

form.getForm().reset(true); 

Fedele alla Unbind qualsiasi record stabilito da loadRecord.

Vedi Ext.form.Basic.reset() sintassi

Problemi correlati