2010-09-14 16 views
9

Estoy tratando de aprender a usar las cuadrículas EXTJS para algunas operaciones CRUD simples sobre una tabla en una aplicación de administrador.EXTJS + Actualización de una tienda con la ID de la base de datos después de guardar una cuadrícula

tengo una cuadrícula sencilla que permite a alguien para editar usuarios, la tienda se define como:

 var userDataStore = new Ext.data.Store({ 
      id: 'userDataStore', 
      autoSave: false, 
      batch: true, 
      proxy: new Ext.data.HttpProxy({ 
       api: { 
        read: '/Admin/Users/All', 
        create: '/Admin/Users/Save', 
        update: '/Admin/Users/Save' 
       } 
      }), 
      reader: new Ext.data.JsonReader(
      { 
       root: 'Data',      
       idProperty: 'ID', 
       totalProperty: 'total', 
       successProperty: 'success', 
       messageProperty: 'message' 
      }, [ 
       { name: 'ID', type: 'string', allowBlanks: false }, 
       { name: 'NT_ID', type: 'string', allowBlank: false }, 
       { name: 'EMail', type: 'string', allowBlank: false }, 
       { name: 'Name', type: 'string', allowBlank: false }, 
       { name: 'Enabled', type: 'bool', allowBlank: false }, 
       { name: 'CurrentRoleCode', type: 'string', allowBlank: false}] 
      ), 
      writer: new Ext.data.JsonWriter(
      { 
       encode: false, 
       writeAllFields: true, 
       listful: true 
      }) 
     }); 

Esto está ligado a una red, y yo soy capaz de cargar y guardar los usuarios sin ningún problema. El botón Guardar se ve así:

var saveButton = new Ext.Button({ 
      text: 'Save', 
      disabled: true, 
      handler: function() { 
       userDataStore.save();      
       pageState.ClearDirty(); 
       saveButton.disable(); 
      } 
     }); 

Sin embargo, al crear un nuevo usuario, el POST JSON para que el usuario se ha publicado en el mismo punto final de servicio REST como "Actualización", con la única diferencia de que ningún ID el valor se publica (ya que uno solo se establece en la tienda cuando se carga desde el servidor).

Esto funciona, y puedo crear usuarios.

El servicio guardar REST emite la fila creada con la nueva ID de la base de datos, y yo estaba bajo la suposición de que EXTJS vinculará automáticamente la nueva ID de la base de datos generada a la fila. Esto le permite al usuario editar más esa fila y causar una actualización en lugar de una inserción.

En su lugar, la fila sigue teniendo un ID de usuario en blanco, por lo que un guardado adicional crea otro usuario nuevo.

Así que o bien:

  • ExtJs se supone que resolver fila generada ID de forma automática y sólo estoy haciendo algo mal.
  • Se supone que debo volver a cargar manualmente la cuadrícula después de cada guardar con una llamada REST adicional.

He estado consultando la documentación y los foros de EXTJS, pero no estoy seguro del enfoque correcto.

¿Alguien puede aclarar?

EDIT: He intentado devolver Success = True en JSON para que coincida con el SuccessProperty, sin embargo, esto todavía no parece funcionar.

EDIT # 2: Hasta ahora, lo único que he encontrado que funciona es hacer "userDataStore.reload()" después de guardar, sin embargo, porque estaba devolviendo el contenido de la tienda después de guardarlo, esperaba que EXTJS lo entendería y actualizaría los valores de fila.

Respuesta

-1

Necesita volver a cargar la tienda con nuevos parámetros en el controlador savebtn como store.reload();

, por supuesto, se puede añadir más params para cargar la acción

2
 
    I've got an idea that may help you. Let't suppose that user added a new 
record in grid, in that moment add a new property newRecOrderNo to the record to 
identify the record after response. When user will post data to server after 
inserting you must get a new ID and associate it to newRecOrderNo 
(like Map<Integer,Integer>). Then return json object like that : 

{ 
    success : true, 
    newIdes : { 
      1 : 23, 
      2 : 34 
    } 
} 
 

Then when you get response do set proper IDs to records: 

    userDataStore.each(function(rec){ 
     if(rec.data.newRecOrderNo){ 
      rec.data.ID = response.newIdes[rec.data.newRecOrderNo]; 
      delete rec.data.newRedOrderNo; 
     } 
    }) 
 
}) 

1

Sí, Conjuntos de ID (y también otros campos, si se devuelve el servidor valores de las modificaron), si crear ajax fondo devuelve registro con establecer id, al menos en extjs 4.1. Debe devolver el registro insertado, con id establecido, bajo la clave 'raíz' como diccionario JSON, en este ejemplo, la raíz es 'Datos', es decir:

{ 
    "Data": { 
    "ID": 8932, 
    "NT_ID": 28738273, 
    ... 
    "CurrentRoleCode": "aaa", 
    }, 
    "success": true 
} 
Cuestiones relacionadas