Problemas para insertar fecha en un EditorGridPanel
Hola amigos he estado haciendo algunos ejemplos para un curso de Ext que estoy preparando en mi centro y me topo con el siguiente problema:
Tengo un EditorGridPanel el cual cargo desde una BD, hasta ahí todo sin problemas se cargan todos los registros y todo ok, ahora cuando edito los campos de mi grid todos se guardan correctamente excepto el de la fecha, pero ahora viene lo curioso y es que cuando me fijo en los parámetros que paso por post no se me envía el value del campo fecha y sin embargo pruebo poniendo un alert a este campo y si me muestra sus valores aquí les dejo el código a ver si alguien sabe que sucede.
Ext.onReady(function(){ Ext.QuickTips.init(); Ext.BLANK_IMAGE_URL='../ext/resources/images/default/s.gif'; Ext.form.VTypes.nameVal = /^([A-Z]{1})[A-Za-z\-]+ ([A-Z]{1})[A-Za-z\-]+/; Ext.form.VTypes.nameMask = /[A-Za-z\- ]/; Ext.form.VTypes.nameText = 'Nombre Incorrecto para un director.'; Ext.form.VTypes.name = function(v){ return Ext.form.VTypes.nameVal.test(v); }; var generos = new Ext.data.SimpleStore({ fields: ['id', 'genero'], data : [['0','Nuevo G&ecuate;nero'],['1','Comedia'],['2','Drama'],['3','Accion']] }); function dame_nombre(val){ return generos.queryBy(function(rec){ return rec.data.id==val; }).itemAt(0).data.genero; } var create_record= new Ext.data.Record.create([ 'id', 'coverthumb', 'title', 'director', {name: 'released', type: 'date', dateFormat: 'Y-m-d'}, 'genre', 'tagline', {name: 'price', type: 'float'}, {name: 'available', type: 'bool'} ]); var store = new Ext.data.Store({ url: '../php/cap6.php', reader: new Ext.data.JsonReader({ id:'id', root: 'rows' },create_record) }); store.load(); var editar_titulo= new Ext.form.TextField(); var editar_director= new Ext.form.TextField({vtype: 'name'}); var editar_tagline= new Ext.form.TextField({maxLength: 45}); editar_fecha= new Ext.form.DateField({ format: 'm/d/Y' }); var editar_genero= new Ext.form.ComboBox({ typeAhead: true, triggerAction: 'all', mode: 'local', store: generos, displayField: 'genero', valueField: 'id', listeners: { select: function(f,r,i){ if (i === 0){ Ext.Msg.prompt('Nuevo Género','Género',Ext.emptyFn); } } } }); var grid= new Ext.grid.EditorGridPanel({ renderTo: document.body, frame: true, title: 'Listado de Películas', height: 300, width: 520, clicksToEdit: 2, enableColumnMove: false, store: store, sm: new Ext.grid.RowSelectionModel({ singleSelect:true }), listeners: { afteredit: function(e){ alert(e.value); var conn = new Ext.data.Connection(); conn.request({ url: '../php/cap6_update.php', params: { action: 'update', id: e.record.id, field: e.field, value: e.value }, success: function(resp,opt) { e.record.commit(); }, failure: function(resp,opt) { e.record.reject(); } }); } }, columns:[ {header:'Título',dataIndex: 'title', sortable: true,editor: editar_titulo}, {header:'Director', dataIndex:'director',editor: editar_director}, {header: "Fecha Estreno",editor: editar_fecha,dataIndex: 'released',renderer: Ext.util.Format.dateRenderer('m/d/Y')}, {header: "Género",editor: editar_genero ,dataIndex: 'genre', renderer: dame_nombre}, {header: "Tagline", dataIndex: 'tagline',editor: editar_tagline} ], tbar:[{ text: 'Nueva Película(Inicio)', icon: 'images/table_add.png', cls: 'x-btn-text-icon', handler: function(){ var conn = new Ext.data.Connection(); conn.request({ url: '../php/cap6_update.php', params: { action: 'insert', title:'New Movie' }, success: function(resp,opt){ var insert_id=Ext.util.JSON.decode( resp.responseText ).insert_id; grid.getStore().insert( 0, new create_record({ title: 'Nueva Película', director: '', genre: 0, tagline:'' }) ); grid.startEditing(0,0); }, failure: function(resp,opt) { Ext.Msg.alert('Error','No se pudo insertar'); } }); } },{ text: 'Nueva Película(Final)', icon: 'images/table_add.png', cls: 'x-btn-text-icon', handler: function(){ var conn = new Ext.data.Connection(); conn.request({ url: '../php/cap6_update.php', params: { action: 'insert', title:'New Movie' }, success: function(resp,opt){ var insert_id=Ext.util.JSON.decode( resp.responseText ).insert_id; grid.getStore().insert( grid.getStore().getCount(), new create_record({ title: 'Nueva Película', director: '', released:'', genre: 0, tagline:'' }) ); grid.startEditing(grid.getStore().getCount()-1,0); }, failure: function(resp,opt) { Ext.Msg.alert('Error','No se pudo insertar'); } }); } }, { text: 'Borrar Película', icon: 'images/table_delete.png', cls: 'x-btn-text-icon', handler: function(){ var sm= grid.getSelectionModel(); var sel= sm.getSelected(); if(sm.hasSelection()){ Ext.Msg.show({ title: 'Eliminar', msg: 'Desea eliminar '+sel.data.title+'?', icon: Ext.Msg.WARNING, buttons: Ext.Msg.OKCANCEL, fn: function(a){ if(a=='ok'){ var conn= new Ext.data.Connection(); conn.request({ url: '../php/cap6_update.php', params: { action: 'delete', id: sel.data.id }, success: function(resp,opt){ grid.getStore().remove(sel); }, failure: function (resp,opt){ Ext.Msg.alert('Error','No se pudo eliminar'); } }); } } }); } } }] }); });
Estube revisando tu código y a simple vista no se va nada raro....
una pregunta... cuando haces el "alert(e.value);" que muestra? un string o un object? si te esta mostrando un objeto date ahi esta tu problema, antes de enviarlo deverías de convertirlo a string <!-- s;) --><!-- s;) -->
saludos
PD: ya que estas haciendo un curso de Ext, te gustaría apoyar con el curso impartido en Quizzpot?? mas info, aquí <!-- l -->viewtopic.php?f=6&t=23<!-- l -->
Muchas gracias ya di con el problema es exactamente lo que me dijiste pongo aquí el segmento de código con el que resolví el problema.
listeners: { afteredit: function(e){ var valor; if(e.field=='released'){ valor= e.value.format('m/d/Y'); }else{ valor= e.value; } var conn = new Ext.data.Connection(); conn.request({ url: '../php/cap6_update.php', params: { action: 'update', id: e.record.id, field: e.field, value: valor }, success: function(resp,opt) { e.record.commit(); }, failure: function(resp,opt) { e.record.reject(); } }); } }
hola amigos sigo con el mismo ejemplo que empecé este post ahora me surge otro problema, resulta que cuando mando a insertar una nueva fila en la BD me la inserta bien y me retorna su id correspondiente para poder hacerle los cambios pero cuando voy a editar cualquiera de los nuevos campos insertados me doy cuenta que tengo otro id y no el que me tiene en en la BD y resulta que siempre es el mismo id es decir 1005 alguien tiene alguna idea de que pueda ser.
debe ser porque no le has especificado el ID cuando insertas el nuevo record al store:
var insert_id=Ext.util.JSON.decode( //<--- insert_id nunca se lo estas asignado al record resp.responseText ).insert_id; grid.getStore().insert( 0, new create_record({ // <--- deberías asignarle aqui el ID title: 'Nueva Película', director: '', genre: 0, tagline:'' }) ); grid.startEditing(0,0);prueba con lo que te digo y me dices si te funciona <!-- s;) --><!-- s;) --> saludos
uhh no ya en eso había pensado y no me funciona mira lo tengo así ahora y no me pincha tampoco el tema está que cuando mando a insertar el me inserta bien e inclusive me devuelve bien el id después de la inserción trato de editar por ejemplo el campo titulo ya el id que me envia por post es el de 1005, ahora pero lo mas curioso está que si inserto refresco la pagina con f5 y edito los cambios todo ocurre normal.
Aqui tienes el codigo de como lo tengo ahora para que veas:
success: function(resp,opt){ var insert_id=Ext.util.JSON.decode(resp.responseText).insert_id; alert(insert_id); grid.getStore().insert(0, new create_record({ id:insert_id, title: 'Nueva Película', director: '', released: new Date(), genre: 0, tagline:'' }) );
¿Conoces a alguien que pueda responder esta pregunta? Comparte el link en Twitter o Facebook
Es necesario registrarse para poder participar en el foro! Si ya tienes una cuenta puedes entrar y comentar en este foro.