Foro

foco en el campo de un editorgrid

0
Hola, este es un tema que ya pregunté una vez pero aun no logro solucionar por si me pueden echar una manito, he probado el sgte ejemplo de los tutoriales para una grilla con edición: [url]http://www.quizzpot.com/2009/09/guardar-los-cambios-del-grid-editable-usando-ajax/[/url] y resulta a la perfección. Ahora bien trato de implementarlo en un panel (sin la ventana) usando el sgte codigo:
Ext.ns('app');
Ext.QuickTips.init();
app.mygridModulos = Ext.extend(Ext.Panel, {
	border: false,
	layout:'fit',
	initComponent: function(){
		var primaryKey = 'id';
		var Record = Ext.data.Record.create([
			{name: primaryKey, type:'int'},
			{name: 'id_interno', type:'int'},
			{name: 'modulo'},
			{name: 'cls'}
		]);
		var texto = new Ext.form.TextField({allowBlank:false, id:'texto'});
		var reader = new Ext.data.JsonReader({root:"datos",id:primaryKey}, Record);
		var myStore = new Ext.data.Store({url: '../php/leer_modulos.php',reader: reader});
		myStore.load();
		var mySelectionModel = new Ext.grid.CheckboxSelectionModel({singleSelect: false});
		var grid = new Ext.grid.EditorGridPanel({
			store: myStore,
			columns: [
				new Ext.grid.RowNumberer(),
				new Ext.grid.CheckboxSelectionModel(),
				{header: 'id_interno', dataIndex: 'id_interno', hidden: true},
				{header: 'Nombre del Modulo', dataIndex: 'modulo', sortable: true, editor:texto},
				{header: 'Icono', dataIndex: 'cls', sortable: true, editor:texto}
			],
			sm: mySelectionModel,
			frame: false,
			border: false,
			stripeRows: true,
			loadMask: true,
			tbar: {
			    defaults:{scope:this},
				items:[
                    {xtype:'button',iconCls:'agregar',tooltip:'Agregar un modulo',handler:agregar},
                    {xtype:'button',iconCls:'eliminar',tooltip: 'Eliminar modulos seleccionados',handler: eliminar_seleccion},
                    '->',
                    {xtype:'button',iconCls:'guardar',tooltip: 'Guardar Cambios',handler: guardar_cambios},
                    {xtype:'button',iconCls:'restablecer',tooltip: 'Restablecer',handler: restablecer}
				]
			}
		});
		Ext.apply(this, {items:[grid]});
		app.mygridModulos.superclass.initComponent.apply(this, arguments);
		//seccion de funciones
		//agregar un nuevo modulo
        function agregar(){
            var position = grid.getStore().getCount();
            var id = Ext.id();
		    var defaultData = {newRecordId:id};
		    var Modulos = grid.getStore().recordType;
		    var modulo = new Modulos(defaultData,id);
		    grid.stopEditing();
		    grid.getStore().insert(position, modulo);
		    grid.startEditing(position-1, 1);
	    } // fin agregar
		function guardar_cambios(){
        }	//fin guardar cambios
        //restablecer
        function restablecer(){
            myStore.rejectChanges();
		    myStore.reload();
        }   //fin restablecer
    	//eliminar el o los elementos seleccionados
		function eliminar_seleccion(){
    		var sm = grid.getSelectionModel();
			var sel = sm.getSelected();
			if (sm.hasSelection()){
				if (sel.data.item==''){return}
				var gridMask = new Ext.LoadMask(grid.getEl(),{msg:'Eliminando, por favor espere...'});
				var cantidadItems = sm.getCount();
				if ( cantidadItems > 1){
					var mensaje = '¿Eliminar los modulos seleccionados?';
				} else {
					var mensaje = '¿Eliminar el modulo '+ sel.data.modulo + '] de la Base de Datos?';
				}
				Ext.Msg.show({
					title: 'Eliminar',
					buttons: Ext.MessageBox.YESNOCANCEL,
					msg: mensaje,
					icon: Ext.Msg.QUESTION,
					fn: function(btn){
						if (btn == 'yes'){
							gridMask.show();
							var data = [];
							var s = sm.getSelections();
							for(var i=0; i<cantidadItems; i++){
								data.push(s[i].data.id_interno);
							}
							var o = {
								url: '../php/eliminar_modulo.php'
								,method:'POST'
								,scope:this
								,timeout: 100000
								,params: {data: Ext.encode(data)}
								,callback: function (options, success, response) {
									gridMask.hide();
									var json = Ext.util.JSON.decode(response.responseText);
									if (json.success) {
										myStore.commitChanges();
										myStore.reload();
									}else{
										Ext.MessageBox.show({
											title: 'Error',
											msg: json.mensaje,
											buttons: Ext.MessageBox.OK,
											icon: Ext.MessageBox.ERROR
										});
									}
								}
							};
							Ext.Ajax.request(o);
						} else {
							gridMask.hide();
						};
					}
				});
			}
		} //fin de eliminar
	},
    onRender: function(){
        app.mygridModulos.superclass.onRender.apply(this, arguments);
    }
});
Ext.reg('gridModulos', app.mygridModulos);
que me funciona relativamente bien, el problema es que cuando agrego un campo nuevo en la grilla el foco no aparece en el campo nuevo. alguna idea? gracias de antebrazo. <!-- s:P --><!-- s:P -->
0
pienso que el problema esta en el SelectionModel pero no encuentro aun como resolverlo <!-- s:( --><!-- s:( -->
0
En donde aparece el foco? o no aparece en ningún lado?
0
no aparece en ningún lado, pero tengo claro que es por el selectionmodel porque le agregué el sgte parámetro a tu ejemplo de la web
new Ext.grid.CheckboxSelectionModel()
y tampoco aparece el foco. en todo caso preferí resolverlo con una ventana modal de edición <!-- s;) --><!-- s;) -->. Aprovecho para preguntarte ¿como hago que la ventana modal permanezca dentro de los limites de su área, digamos dentro del "center" de un viewport?
0
tendrias que agregarle un "constrain"
0
muchisisimas gracias <!-- s:) --><!-- s:) -->

¿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.