Buenas gente:
estoy queriendo hacer dinámica la llamada a items desde un popup y no me sale nada.
El caso es el siguiente:
quiero que según el estado de un ef_check_box que esta en un formulario multlinea llame a un item, en ese multilinea tengo el ef_popup y el ef_check_box, por defecto el ef_popup llama a un item, pero si el ef_check_box esta tildado quiero que llame a otro item.
Estuve buscando en el foro pero no encontré algo parecido, tambien busque en la wiki, vi el componente vinculador, encontre el metodo Object crear (destino, servicio, parámetros, objetos), pero no se como usarlo.
escribi algo asi dentro del conf del multilinea, pero solo accede si el check box tiene valor por defecto
if(!$form_ml->ef('externo')->seleccionado()){
$form_ml->ef('id_evaluador')->vinculo()->set_item('proyecto_sspi','3659');
}
Hola Gustavo,
actualmente esta un poco complicado hacer lo que queres, el problema es que no hay un metodo en la API js que te permita cambiar el vinculo de un ef_popup, entonces aun cuando pudieras crear un vinculo nuevo en JS que apunte al otro item, no tenes forma de reemplazar el vinculo actual, en ese caso tendrias que comenzar a manipular a mano el disparo del vinculo en la celda HTML.
Una solucion mas facil (aunque menos elegante visualmente) seria la siguiente:
- Tener 2 ef_popup, c/u apuntando a su item correspondiente
- Visualizar los efs de acuerdo al estado del checkbox
Eso seria bastante simple de implementar, visualmente puede aparecer un glitch hasta que el browser refresca y lo que si deberias tener en cuenta del lado servidor, es que el valor para ese campo puede venir por cualquiera de los 2 efs, lo mismo para el metodo conf, ahi deberias saber a cual de los 2 cargar de acuerdo al estado del checkbox.
Saludos
Hola richard:
solucione el problema con los 2 ef_popup y un ef_combo, dependiendo de lo que selecciono en el combo me habilita el ef_popup correspondiente.
El codigo que escribi es
{$this->objeto_js}.evt__externo__procesar = function(es_inicial, fila)
{
var filas = this.filas();
if(!es_inicial){
for (id_fila in filas) {
var nodoexterno = this.ef('externo').ir_a_fila(filas[id_fila]).input();
var indice = nodoexterno.selectedIndex;
var valor='';
if (indice) {
valor = nodoexterno.options[indice].text;
}
if(valor!=''){
if(valor=='Externo'){
this.ef('id_evaluador').ir_a_fila(filas[id_fila]).mostrar();
this.ef('id_evaluador2').ir_a_fila(filas[id_fila]).ocultar();
}else{
this.ef('id_evaluador').ir_a_fila(filas[id_fila]).ocultar();
this.ef('id_evaluador2').ir_a_fila(filas[id_fila]).mostrar();
}
}else{
this.ef('id_evaluador').ir_a_fila(filas[id_fila]).ocultar();
this.ef('id_evaluador2').ir_a_fila(filas[id_fila]).ocultar();
}
}
}else{
for (id_fila in filas) {
var nodoexterno = this.ef('externo').ir_a_fila(filas[id_fila]).input();
var indice = nodoexterno.selectedIndex;
var valor='';
if (indice) {
valor = nodoexterno.options[indice].text;
}
if(valor!=''){
if(valor=='Externo'){
this.ef('id_evaluador').ir_a_fila(filas[id_fila]).mostrar();
this.ef('id_evaluador2').ir_a_fila(filas[id_fila]).ocultar();
}else{
this.ef('id_evaluador').ir_a_fila(filas[id_fila]).ocultar();
this.ef('id_evaluador2').ir_a_fila(filas[id_fila]).mostrar();
}
}else{
this.ef('id_evaluador').ir_a_fila(filas[id_fila]).ocultar();
this.ef('id_evaluador2').ir_a_fila(filas[id_fila]).ocultar();
}
}
}
}
Después del lado del servidor escribí el código para que el valor del campo que se guarda en la base de datos, según el estado seleccionado del combo, me lo muestre en el ef_popup que corresponde, el codigo lo escribi en los eventos conf y modificacion del frm
function conf__frm_ml_evaluadores(toba_ei_formulario_ml $form_ml)
{
$datos=$this->cn()->get_evaluadores_por_proyecto_sin_condicion();
foreach($datos as $elemento){
$evaluador['externo']=$elemento['externo'];
$evaluador['mensaje']=$elemento['mensaje'];
$evaluador['x_dbr_clave']=$elemento['x_dbr_clave'];
if($elemento['externo']=='no'){
$evaluador['id_evaluador2']=$elemento['id_evaluador'];
}else{
$evaluador['id_evaluador']=$elemento['id_evaluador'];
}
$datos_ok[$elemento['x_dbr_clave']]=$evaluador;
}
if(isset($datos_ok) and !empty($datos_ok)){
$form_ml->set_datos($datos_ok);
}
}
function evt__frm_ml_evaluadores__modificacion($datos)
{
$datos_ok=null;
foreach($datos as $elemento){
$evaluador['externo']=$elemento['externo'];
$evaluador['mensaje']=$elemento['mensaje'];
$evaluador['x_dbr_clave']=$elemento['x_dbr_clave'];
$evaluador['apex_ei_analisis_fila']=$elemento['apex_ei_analisis_fila'];
if($elemento['externo']=='no'){
$evaluador['id_evaluador']=$elemento['id_evaluador2'];
}else{
$evaluador['id_evaluador']=$elemento['id_evaluador'];
}
$datos_ok[$elemento['x_dbr_clave']]=$evaluador;
}
$this->cn()->procesar_evaluadores($datos_ok);
}
Funciona bien. Muchas Gracias.