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?
Debe proporcionar la versión ExtJS exacta que está utilizando – sra
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
Sra: Estoy usando ExtJs 4.1.1 – John