2011-10-13 16 views
5

Tengo una cuadrícula vinculada a un formulario, la acción de envío de formularios es actualizar el registro cargado si hay uno y agregar un nuevo registro si es un formulario en blanco. pero si selecciono un registro primero y luego llamarextjs 4 formulario todavía tiene el conjunto de registros después de form.reset();

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

para borrar el formulario para que pueda añadir un nuevo registro sobrescribe el registro seleccionado previamente con una actualización.

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

no debería myform.getRecord(); ser nulo después de un reinicio? ¿Cómo borro la selección de registro?

+0

posible duplicado de [Limpiar el formulario de registro No Borrado Valores - ExtJS 4.2] (http://stackoverflow.com/questions/18988727/reset-form-record-not-clearing-values-extjs -4-2) –

Respuesta

3

En resumen, no, no debería y no tiene enfoques legales para borrar el registro después de la primera vez que carga algo a través del loadRecord.
Aunque todavía podría hacer la asignación myform.getForm()._record = null, me opondría firmemente a eso, ya que puede romper algunas funciones internas de ExtJS.

Aquí es un extracto de ExtJS API:

getRecord(): Ext.data.Model
Devuelve el último ejemplo Ext.data.Model que se cargó a través de loadRecord

Y hace exactamente eso, devuelve el último registro cargado a través del loadRecord.

Aquí están algunas fuentes:

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

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

En realidad, esos son los únicos métodos de Ext.form.Basic (una instancia de que se devuelve por getForm()) que trata de this._record campo.

En cuanto a restablecimiento

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

Como se puede ver, reinicio no tiene nada que ver con el registro devuelto por getRecord(), es sólo restablecer los valores de campo.

+0

¡Gracias por la explicación! He agregado un campo oculto para el ID de registro en su lugar y verifico qué tipo de envío tengo, independientemente de si el campo de identificación está o no configurado. – Early73

+0

Esto ya no es válido. Mire las respuestas de la pregunta http://stackoverflow.com/questions/18988727/reset-form-record-not-clearing-values-extjs-4-2 –

0

puedo encontrar esta pregunta porque tengo un escenario similar pero ligeramente diferente:

  • ExtJS 4.1.1
  • TreePanel
  • método

En ExtJS 4.1 en sincronía() se puede utilizar una Opciones objeto en el que puede definir una devolución de llamada, éxito y funciones de falla. Ya que estoy seguro sólo estoy synchronozing un solo registro, he cargado el registro devuelto:

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

Un poco tarde pero la esperanza le ayuda.

2

Para cualquier persona interesada, puede anular el panel de formulario predeterminado para agregar funcionalidad para borrar campos de formulario.Añadir lo siguiente a su código:

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

continuación, puede borrar un formulario utilizando:

myForm.clearForm()

Dónde myForm es su panel de formato.

2

Esto es lo que busca:

form.getForm().reset(true); 

verdadera para desenlazar cualquier récord establecido por loadRecord.

Ver Ext.form.Basic.reset() sintaxis

Cuestiones relacionadas