Combobox duplicado
Buenas veran tengo la siguiente situacion, un grid me abre mediante un boton una ventana y en esa ventana tengo un formulario con 1 solo campo, un combobox cargado mediente su store desde una aplicacion java-spring-hibernate ( aunque imagino que eso es irrelevante ).
El caso es que cada vez que abre esa ventana desde el boton del grid me aparecen 1 nuevo combobox, apilandose.
Les dejo el codigo por si puedan colaborarme.
Gracias por adelantado.
<%@page import="com.asistp.geremias.revolution.Constantes"%>
<%@page
import="com.asistp.geremias.revolution.soporte.SesionGeremiasRevolution"%>
<script type="text/javascript">
Ext.namespace('com.asistp.geremias.revolution.relaciongrupocpe');
com.asistp.geremias.revolution.relaciongrupocpe.Listado =
{
init : function()
{
var registro = Ext.data.Record.create(
[
{
name : 'relaciongrupocpe_id'
},
{
name : 'grupocpe'
},
{
name : 'grupocpe_id'
},
{
name : 'cpe'
},
{
name : 'cpe_id'
} ]);
var lector = new Ext.data.JsonReader(
{
totalRecords : "total",
root : "datos"
}, registro);
var proxy = new Ext.data.HttpProxy(
{
method : 'GET',
url : 'relaciongrupocpe.acs?peticion=jsonListado'
});
var almacen = new Ext.data.Store(
{
id : 'almacen_relaciongrupocpe',
proxy : proxy,
reader : lector
});
var modeloColumnas = new Ext.grid.ColumnModel(
[ new Ext.grid.RowNumberer(),
{
id : 'relaciongrupocpe_id',
header : "#",
width : 50,
sortable : true,
dataIndex : 'grupocpe_id'
},
{
header : 'Grupo',
width : 368,
sortable : true,
dataIndex : 'grupocpe'
},
{
header : 'Cpe',
width : 367,
sortable : true,
dataIndex : 'cpe'
} ]);
var modeloSeleccion = new Ext.grid.CheckboxSelectionModel(
{
singleSelect : true
});
var grid = new Ext.grid.GridPanel(
{
id : 'grid_relaciongrupocpe',
store : almacen,
cm : modeloColumnas,
sm : modeloSeleccion,
stripeRows : true,
height : 400,
width : 835,
tbar :
[ new Ext.Toolbar.Button(
{
text : 'volver',
disabled : false,
iconCls : 'accion_volver',
handler : function()
{
Ext.getCmp("ventana_cpe").load("cpe.acs?peticion=listado");
}
}), new Ext.Toolbar.Button(
{
text : 'nuevo',
disabled : false,
iconCls : 'accion_nuevo',
handler : function()
{
almacenGrupos.reload();
ventana.show();
}
}) ]
});
almacen.load();
grid.render("contenido_relaciongrupocpe_listado");
var almacenGrupos = new Ext.data.JsonStore(
{
url : 'relaciongrupocpe.acs?peticion=jsonOpcionesGrupos',
root : 'datos',
totalProperty : 'total',
fields :
[
{
name : 'nombre',
type : 'string'
},
{
name : 'grupocpe_id',
type : 'integer'
} ]
});
var campoGrupo = new Ext.form.ComboBox(
{
store : almacenGrupos,
fieldLabel : 'Grupo',
displayField : 'nombre',
valueField : 'grupocpe_id',
hiddenName : 'grupocpe_id',
forceSelection : true,
triggerAction : 'all',
editable : false,
allowBlank : false,
emptyText : 'seleccione grupo',
anchor : '100%',
id : 'grupo',
name : 'grupo'
});
var formulario = new Ext.FormPanel(
{
id : 'formulario_relaciongrupocpe',
url : 'relaciongrupocpe.acs?peticion=consolida',
width : 400,
height : 100,
padding : 15,
border : false,
plugins :
[ new Ext.ux.FormClear() ],
items : campoGrupo
});
var ventana = new Ext.Window(
{
id : 'ventana_formulario_relaciongrupocpe',
title : 'Formulario Relacion Grupo Cpe',
width : 410,
height : 150,
resizable : false,
maximizable : false,
modal : true,
closeAction : 'hide',
items :
[ formulario ],
buttons :
[
{
text : 'Cancelar',
handler : function()
{
ventana.hide();
},
scope : this
},
{
text : 'Guardar',
handler : this.consolida,
scope : this
} ]
});
ventana.on('hide', function()
{
almacen.reload();
});
}
};
Ext.onReady(com.asistp.geremias.revolution.relaciongrupocpe.Listado.init, com.asistp.geremias.revolution.relaciongrupocpe.Listado)
{
Ext.QuickTips.init();
}
//-->
</script>
solucion: en este caso se duplicaba el combo porque la ventana era 'ocultada' y al volverla a abrir lo volvia a generar, incluso con el mismo id generaba otro combo.
para evitar esto los modales mejor crearlos con en un metodo que se dispare del medio que corresponda y como action default close en lugar de hide
me pasa lo mismo, me crea muchos combos. O a veces ni siquiera me muestra un combo en el form. Probe con la opcion close, en vez de Hide, pero no entendi bien cuando decis "un metodo que se dispare del medio que corresponda".
Espero respuestas, Muchas gracias
si bueno el mismo problema yo lo resolvi asi, tengo un metodo abreVentana que por ejemplo lo llamo en el evento doble click de un grid de este modo
grid.on('rowdblclick', function(grid, rowIndex, e)
{
var registro = grid.getSelectionModel().getSelected();
if (!registro)
{
Ext.Msg.alert("Sin seleccion", "No hay nada seleccionado");
}
if (registro)
{
com.asistp.geremias.revolution.tarea.Listado.abreVentanaFormulario(registro);
}
});
En el metodo abre ventana ya me creo un objeto ventana con el formulario y llamo a su metodo show(); asi no me duplica las cosas porque cada doble click en el grid crea una nueva ventana.
te dejo el metodo abre ventna mio por si te sirve
abreVentanaFormulario: function (registro)
{
if (Ext.getCmp("ventana_formulario_tarea") != null)
{
Ext.getCmp("ventana_formulario_tarea").close();
}
var formulario = new Ext.FormPanel(
{
id : 'formulario_tarea',
url : 'tarea.acs?peticion=consolida',
width : 490,
height : 260,
padding : 15,
border : false,
plugins:[new Ext.ux.FormClear()],
items :
[
{
xtype : 'hidden',
id : 'tarea_id'
},
{
xtype : 'textfield',
fieldLabel : 'Nombre',
anchor : '100%',
id : 'nombre',
allowBlank : false
}]
});
formulario.getForm().loadRecord(registro);
var ventana = new Ext.Window(
{
id : 'ventana_formulario_tarea',
title : 'Formulario Tarea',
width : 500,
height : 320,
resizable : false,
maximizable : false,
modal : true,
closeAction : 'close',
items :
[ formulario ],
buttons :
[
{
text : 'Cancelar',
handler : function()
{
ventana.close();
},
scope : this
},
{
text : 'Guardar',
handler : this.consolida,
scope : this
} ]
});
ventana.on('close', function()
{
com.asistp.geremias.revolution.tarea.Listado.anulaBotonera();
Ext.getCmp("grid_tarea").getStore().reload();
});
ventana.show();
}
¿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.