Foro

empaquetado en javascript

0
Saludos, tengo la siguiente duda con respecto al empaquetado, quiero construir paquetes con componentes de las Ext para reusar form, grid entre otros, el problema es que no logro acceder a las propiedades de los componentes creados en los paquetes, se que el problema es el manejo del scope quisiera que me aclararan esto y si es posible me den una estrategia para manejar esta situacion
0
podrias poner un pequeño ejemplo de tu codgio de empaquetado para ver como podrias manipular el scope y tener una ide mas clara del scope dentro de tus componentes, adentro del paquete deberias poder acceder a los componentes con this,
0
en el curso hay un tutorial donde hablo al respecto: <!-- m -->http://www.quizzpot.com/2009/03/el-cont ... able-this/<!-- m --> No utilizé Ext pero te da una idea de como las funciones adoptan un diferente scope o contexto cuando se definen, es por eso la importancia de utilizar el método "createDelegate" que nos proporciona Ext o bien definir el scope en la configuración del componente. saludos
0
Saludos, gracias por los comentarios, en efecto todo se trata del buen manejo de la palabra reservada this, ordenare un poco el codigo y lo subiere para que me indiquen si voy por buen camino, me llama la atencion lo que mencionan de la utilizacion del metodo createDelegate de las Ext, me podrian indicar en que seccion del curso o si hay algun tutorial sobre dicho metodo
0
mmmm.... no he hablado al respecto.... sería bueno escribir uno <!-- s:D --><!-- s:D --> lo agregaré ami TODO list <!-- s:D --><!-- s:D -->
0
Saludos investigado sobre la funcion createDelegate he conseguido resolver varios problemas pero estoy atascado nuevamente con un problema de scope quiero trabajar con mi objeto desde una funcion anonima en un handler de textfield y no consigo que funcione correctamente adjunto codigo fuente para que me den su opinion.
Ext.namespace('com.sigesp.vista');
com.sigesp.vista.comCampoCatalogo = function(options){
	
	this.dataStoreCatalogo = options.datosgridcat;
	//Creando el Json para la configuracion de los items del formulario de busqueda
	var cadenafiltro="[";
	for (var i = 0; i < options.arrfiltro.length; i++) {
       	if(i==options.arrfiltro.length-1){
			cadenafiltro =  cadenafiltro + "{fieldLabel:'"+options.arrfiltro[i].etiqueta+"',id:'"+options.arrfiltro[i].id+"',"+
							"changeCheck: function(){"+
							"var valor = this.getValue();"+
//aqui el problema 
//this.dataStoreCatalogo aprece no definido 							"this.dataStoreCatalogo.filter('"+options.arrfiltro[i].valor+"',valor);"+
							"if(String(valor) !== String(this.startValue)){"+
								"this.fireEvent('change', this, valor, this.startValue);"+
							"}"+ 
							"},"+								 
							"initEvents : function(){"+
								"AgregarKeyPress(this);"+
							"}"+              
    						"}";
		}else{
			cadenafiltro =  cadenafiltro + "{fieldLabel:'"+options.arrfiltro[i].etiqueta+"',id:'"+options.arrfiltro[i].id+"',"+
							"changeCheck: function(){"+
							"var valor = this.getValue();"+
							"this.dataStoreCatalogo.filter('"+options.arrfiltro[i].valor+"',valor);"+
							"if(String(valor) !== String(this.startValue)){"+
								"this.fireEvent('change', this, valor, this.startValue);"+
							"}"+ 
							"},"+							 
							"initEvents : function(){"+
								"AgregarKeyPress(this);"+
							"}"+               
     						"},";
		}
	}
	cadenafiltro=  cadenafiltro + "]";
	var objetofiltro = Ext.util.JSON.decode(cadenafiltro);
	//Fin creando el Json para la configuracion de los items del formulario de busqueda	
		
	//Creando formulario de busqueda del catalogo
	this.formBusquedaCat = new Ext.FormPanel({
        	labelWidth: 80, 
			frame:true,
        	title: 'Busqueda',
        	bodyStyle:'padding:5px 5px 0',
        	width: 630,
			height:100,
        	defaults: {width: 230},
        	defaultType: 'textfield',
			items: objetofiltro
		});
	//Fin creando formulario de busqueda del catalogo
		
	//Creando la instacia de la grid del catalogo
	this.gridcatalogo = new Ext.grid.GridPanel({
	 		width:options.ancho,
	 		height:options.alto,
	 		tbar: this.formBusquedaCat,
	 		autoScroll:true,
     		border:true,
     		ds: this.dataStoreCatalogo,
       		cm: options.colmodelocat,
       		stripeRows: true,
      		viewConfig: {forceFit:true}
		});
	//Fin Creando la instacia de la grid del catalogo
	
	//Eventos de la ventana catalogo
	this.cerrarVentana = function(){
		this.vencatalogo.hide();
	}
	
	this.cargarDatosCat = function (){
		var datos = arguments[0].responseText;
		var objetodata = eval('(' + datos + ')');
		if(objetodata!=''){
			this.dataStoreCatalogo.loadData(objetodata);
			copiadatastorecatalogo.loadData(objetodata);
		}
	}
	
	this.mostrarVentana = function(){
		Ext.Ajax.request({
			url : options.rutacontrolador,
			params : options.parametros,
			method: 'POST',
			success: this.cargarDatosCat.createDelegate(this, arguments, 2)
		});
		this.vencatalogo.show();
	}
	
	this.setDataCampo = function(){
		var registrocat = this.gridcatalogo.getSelectionModel().getSelected();
		this.campo.setValue(registrocat.get(options.campovalue));
		if(options.labelvalue!=''){
			this.etiqueta.setText(registrocat.get(options.labelvalue));	
		}
		this.vencatalogo.hide();
	}
	//Fin de los eventos de la ventana catalogo
	
	//Creando la instacia de la window para la ventana del catalogo
	this.vencatalogo = new Ext.Window({
    		title: options.titvencat,
			autoScroll:true,
        	width:options.ancho,
        	height:options.alto,
        	modal: true,
        	closable:false,
        	plain: false,
			items:[this.gridcatalogo],
			buttons: [{
						text:'Aceptar',  
			        	handler: this.setDataCampo.createDelegate(this)
			       	},{
			      		text: 'Salir',
			        	handler:this.cerrarVentana.createDelegate(this)
                  	}]
      	});
	//Fin creando la instacia de la window para la ventana del catalogo
	
	this.campo = new Ext.form.TextField({
					xtype: 'textfield',
					fieldLabel: options.tittxt,
					id: options.idtxt,
					style: options.postxt,
					width: options.anchotext,
					readOnly: true
					});
	
	this.boton = new Ext.Button({
					xtype:'button',
					iconCls: 'menubuscar',
					style:options.posbot,
					handler:this.mostrarVentana.createDelegate(this)
					});
					
					
					
	this.etiqueta = new Ext.form.Label({
					xtype:'label',
					id: options.idlabel,
					style:options.poslabel,
					width: options.anchoetiqueta
					});
		
	this.fieldsetCatalogo = new Ext.form.FieldSet({
					height:390,
					width:725,
					border:false,
			    	items:[this.campo,this.boton,this.etiqueta]
					});
}//Fin componente campo catalogo

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