2012-09-19 20 views
7

tengo el siguiente modelo:Modelo ExtJs4 con id de usuario definido

Ext.define('Gst.model.Order', { 
    extend: 'Ext.data.Model', 
    idProperty: 'id', 
    fields: [ 
     { name: 'id', type: 'string' } 
    ] 
});  

Mi problema es que el ID del modelo de orden es definido por el usuario. Por lo que el código para crear una nueva instancia orden y la inserta en la tienda órdenes serían:

order = Ext.create('Gst.model.Order', {'id': 'someuserdefinedvalue'}); 
store.insert(0, order); 

Lo que sucede es porque el idProperty es suministrada por el usuario, entonces el orden no está marcado como fantasma y por lo tanto no se considera sucio. Debido a esto, no se envía POST al servidor. Si fijo manualmente el fin de fantasma y sucio entonces puedo activar el POST cuando inserto el orden en la tienda como:

order = Ext.create('Gst.model.Order', {'id': 'someuserdefinedID'}); 
order.phantom = true; 
order.setDirty(); 
store.insert(0, order); 

Esto estaría bien, pero mi código del lado del servidor utiliza controladores REST y esperar un POST no tener e id en la url. Así, mientras que las cuestiones ExtJs solicitud se

POST http://app.local/api/order/someuserdefinedID.json 

Mientras que el formato de mi servidor buscaría sería

POST http://app.local/api/order.json 

Así que la única manera que tengo alguna con para fijar esta sería la creación de un orden y establece phantom = true y llama a setDirty(). Esto provocaría que se emitiera el POST, y luego en mi RestProxy anula buildUrl: con lógica para probar una Solicitud de POST y eliminar la IdProperty de la url.

Esto me parece un trabajo desagradable y me gustaría saber si hay una manera mejor.

Supongo que mi pregunta es: ¿Cuál es la mejor manera de manejar algo como esto?

+0

Debe proporcionar la versión ExtJS exacta que está utilizando – sra

+1

No es habitual establecer la ID en el lado del cliente para un nuevo registro. Ese suele ser el trabajo de la base de datos. – dbrin

+0

Sra: Estoy usando ExtJs 4.1.1 – John

Respuesta

1

¿Sería una posible solución agregar una propiedad order_id al modelo y dejar el id como la clave natural? Me parece mucho trabajo luchar contra la forma en que el marco desea tratar el idProperty. Solo mi 2c.

+0

Estoy de acuerdo con John. Aunque soy un gurú de almacenamiento de datos, entonces voy a sugerir diferentes términos para su sugerencia. Debería tener una clave sustituta (clave única) llamada id, y mantenerla en blanco durante la creación del registro para evitar una llamada de función API pirateada con el marco. Y luego agregue otra propiedad, como la clave natural, llamada order_id.Establezca order_id durante la creación de su registro, y tenga id como identificador de identidad en su base de datos, por lo que se incrementa en uno cada vez, y no necesita ser configurado por un usuario. Una regla general para cualquier aplicación es que el usuario final nunca debería ver la identificación interna (única). – MacGyver

0

Como dice John Hall, debe usar otro idproperty o cambiar el nombre de su id para que el marco utilice un id. Implícito (Id. Interno).

El sucio/fantasma funcionaría y la publicación incluiría la identificación de usuario en los datos, pero no como la clave del registro.

Cuestiones relacionadas