Problemas para identificar un vínculo. [TERMINADO]

Hola a todos.
Tengo un ef_popup al que le agrego un icono de utilería con una url para navegar hacia una operación también en popup.
Dicha url es creada mediante el toba_vinculador con el método get_url durante la configuración del formulario correspondiente.
Ahora bien, cuando configuro el formulario a partir de un registro existente tengo el dato necesario para agregarlo como parámetro al icono utilería, No así cuando se trata de un registro nuevo.
Me gustaría poder modificar el parámetro de dicho vínculo cuando cambia el valor del ef_popup mediante una función ajax a partir del javascript.
Mi problema radica en que no tengo forma, o seguramente, no me doy cuenta de como referirme al vínculo para modificar los parámetros desde javascript.

Gracias por la atención.

Hola Claudio,

para acceder al vinculo del ef_popup via JS podes usar esto.
Luego mediante una llamada como la siguiente, podes agregar los parametros que sean necesarios, tene en cuenta que algunos pueden ser sobre escritos al momento de abrir el vinculo.


var mi_vinculo = ef_en_cuestion.get_id_vinculo();
param['cachito'] = valor_cachito;
vinculador.agregar_parametros(mi_vinculo, param);

Ahora, el tema de ajax va por otro lado… al ser asincronica la llamada, nada te garantiza que el valor vuelva antes de que se dispare el vinculo, con lo cual aun cuando pudieras accederlo para modificarlo quizas no vuelva la respuesta a tiempo. Dicho parametro extra que agregas depende de algo en el server o lo podes obtener enteramente del cliente?

Saludos

Gracias por tu atención Richard. Pero en realidad no estoy queriendo acceder al vínculo del ef_popup, sino de un icono de utilería que le agregué al ef_popup.
De todos modos, estuve mirando un poco y me pareció notar que este icono de utilería no está asociado a un vínculo o sea, no es una etiqueta , sino que es un . Por eso creo que no es posible agregarle parámetros con los métodos del vinculador en JS sino solo en el momento de la configuración y creación del mismo en el PHP.
Digo esto porque al final de la configuración del formulario le puse un ei_arbol que me muestre todos los vínculos que tiene meidante un método del toba_vinculador, y me muestra solo los de los ef_popux que hay en el form, pero no el del ícono de utilería.

Vamos a ver que se me ocurre. Si sabes la posible solución, soplamelá. Si no, si la llego a encontrar, la soplo.
Abrazo.

Bueno: Confirmo que no encuentro forma de hacerlo usando el vinculador, por lo tanto opté por solucionarlo usando DOM.
En primer lugar, al crear el icono utilería en la configuración del formulario en el php agrego el parámetro pero con un valor nulo. Eso es para que el texto de la función onclick sea siempre igual en lo referente al parámetro quedeseo modificar y de ese modo poder reemplazarlo sin complicaciones.

#-- pongo el ícono para el link de Ubicación geográfica
		$imagen = 'img/ubicacion.png';
		$mensaje = "Ver la Ubicación Geográfica";
		$id = "'ubi_geo'";
        $mi_icono = new mi_icono();
        
        $enlace = toba::vinculador()->get_url('organigrama', "250000276", array('punto_geom'=>null),array('celda_memoria'=>'celda_ubi_geo'));
                                               
        	
		$mi_icono->set_parametros($imagen,$mensaje,$id,$enlace);
		$form->ef('c01ubi_geo_id')->agregar_icono_utileria($mi_icono);

Luego, en la extensión de la clase del formulario agrego JS para completar o reemplazar el parámetro (punto_geom) cada vez que cambie el valor de un campo dado.

function extender_objeto_js()
	{
		echo "
        
        if(as == null){
            var as = document.getElementById('ubi_geo').onclick.toString();
            as = as.replace('function onclick(event)','');
            as = as.replace('{','');
            as = as.replace('}','');
        }
        
		//---- Procesamiento de EFs --------------------------------
		
		{$this->objeto_js}.evt__c01ubi_geo_id__procesar = function(es_inicial)
		{
		      var id_ubi = this.ef('c01ubi_geo_id').get_estado();
          
    		  if(id_ubi != ''){
    		      this.controlador.ajax('get_datos_ubi_punto', id_ubi, this, this.datos_ubi_punto);
    		  }
              else{
                document.getElementById('ubi_geo').style.visibility='hidden';
              }
		}
        
        //---- Agrego valor al parametro punto_geom
		{$this->objeto_js}.datos_ubi_punto = function(punto_geom)
		{ 
		     if(punto_geom == ''){
		          document.getElementById('ubi_geo').style.visibility='hidden';
		     }
             else{
                document.getElementById('ubi_geo').style.visibility='visible';
                ff = as.replace('punto_geom=', 'punto_geom='+punto_geom);
                document.getElementById('ubi_geo').onclick = function(){eval(ff);};
             }
		}
        
        //------
        
		";
	}

Bueno. se que no es un código para alardear, pero, por ahí, a alguno le sirve.
Un cordial saludo a todos.

Hola Claudio,

no, para los iconos de utileria no hay API JS… siempre se los penso como algo final, que ya salian configurados desde el server. Igual eso no quiere decir que no se pueda meter garfio.

En primer lugar, al crear el icono utilería en la configuración del formulario en el php agrego el parámetro pero con un valor nulo. Eso es para que el texto de la función onclick sea siempre igual en lo referente al parámetro quedeseo modificar y de ese modo poder reemplazarlo sin complicaciones.

El nombre del parametro es fijo?.. si es asi lo podes agregar directamente en JS con algo asi:


var link_a = document.getElementById('ubi_geo');
link_a.href = vinculador.concatenar_parametros_url(link_a.href , {'punto_geom', valor});

Eso lo podrias poner en el procesar del ef. :wink:

La otra es hacerlo de una manera mas rebuscada (osea a lo Satan Claus :p)


       #-- pongo el ícono para el link de Ubicación geográfica
	$imagen = 'img/ubicacion.png';
	$mensaje = "Ver la Ubicación Geográfica";
	$id = "'ubi_geo'";
       $mi_icono = new mi_icono();
      
       //--Generamos el vinculo a pìco y pala
        $vinculo = new toba_vinculol('organigrama', "250000276");
        $vinculo->set_celda_memoria('celda_ubi_geo');

         //-- Le indicamos al vinculador que tiene que enviar este vinculo al cliente y devolvernos un identificador para su invocacion
         $id_vinculo = toba::vinculador()->registrar_vinculo($vinculo);
 
        //-- Le pasamos el id de vinculo a la clase del icono
	$mi_icono->set_parametros($imagen,$mensaje,$id,$id_vinculo);
	$form->ef('c01ubi_geo_id')->agregar_icono_utileria($mi_icono);

Internamente, la clase del icono lo que tiene que hacer al enviar el “onclick” es poner algo asi (necesitas el id js del form):


onclick='{$this->objeto_js}.invocar_vinculo(id_evento, $id_vinculo);'

Eso te permite definir un metodo tipo callback para modificar los parametros:


{$this->objeto_js}.modificar_vinculo__id_evento = function(id_vinculo)
{
  var valor_geom = this.ef('c01ubi_geo_id').get_estado();
  vinculador.agregar_parametros(id_vinculo, {'punto_geom': valor_geom});
}

Con eso te metes en el medio de la invocacion y le agregas el parametro solo cuando lo necesitas. Tiene su lado mas corto en Js… pero mas vueltero en PHP… es solo otra forma mas.
Lo bueno es que te las rebuscaste y le encontraste solucion, bien ahi! y ojo con el eval en JS.
Saludos

Ok, gracias Richard, voy a aprovechar tus ideas y consejos para optimizar el programa.
Feliz 2017 y un sincero abrazo.

Abrazo Claudio y Feliz 2017 para vos tambien