UDA-EJIE / udaRUP

RUP components repository
Other
13 stars 10 forks source link

[rup_combo] Combos anidados onChange (v3.3.0) #97

Closed GardiHuts closed 6 years ago

GardiHuts commented 6 years ago

Estamos experimentando problemas con los combos anidados desde que hemos migrado a la versión 3.3.0. Parece que el evento change se invoca multiples veces lo que hace que se descontrolen las llamadas.

Tenemos estos 2 combos:

$("#idClasificacion_Motivos_Subs").rup_combo({
    rowStriping: true,
    loadFromSelect:true
});

$('#idMotivoSubsanacion_Motivos_Subs').rup_combo({
    parent: ["idClasificacion_Motivos_Subs"],
    source: $.rup.CTX_PATH + "combo/comboMotivo",
    sourceParam: {label:"desc", value:"idMotivoSubsanacion"},
    rowStriping: true,
    blank:""
});

$("#idMotivoSubsanacion_Motivos_Subs").on("change", function(){
    console.log("change");
});

Al seleccionar de forma manual el combo padre, se realiza una unica vez la llamada para recarga rel hijo pero se lanza el "change" 3 veces:

image

Si por el contrario seleccionamos el combo de manera progamatica:

$("#idClasificacion_Motivos_Subs").rup_combo("setRupValue", 1)

Se realizan 2 llamadas para recargar el hijo y se invoca el "change" 6 veces:

image

Este comportamiento se multiplica y agrava en el caso de tener mas combos anidados, hasta el punto de realizar mas de 100 llamadas en un mantenimiento de una localizacion con Nora por ejemplo:

image

image

GardiHuts commented 6 years ago

Hola, he migrado a la versión 3.5.0 y he aplicado el cambio que habéis realizado para solucionar la incidencia, para poder utilizar la solución antes de que liberéis la 3.6.0 y solo se ha solucionado una parte de la incidencia. Ahora, cuando selecciono el combo de manera programática, con setRupValue, ya no me realiza 2 llamadas. Esto esta correcto.

El problema sigue siendo cuando selecciono el combo, de forma programática o manual, se sigue lanzando el evento change del hijo 3 veces. No se ha solucionado.

Os pongo un ejemplo de como lo tengo implementado y como se lanza el evento del hijo 3 veces:

        // Combo Titulacion
    $("#idTitulacion_detail_table").rup_combo({
        rowStriping: true,
        loadFromSelect: true
    });
    // Combo Grado
    $("#idGradoTitulacion_detail_table").rup_combo({
        parent: ["idTitulacion_detail_table"],
        source: $.rup.CTX_PATH + "titulacionesProf/combo/titulacionGrado",
        sourceParam: {label:"desc", value:"idGradoTitulacion"},
        rowStriping: true,
        blank: ""
    });
    $("#idGradoTitulacion_detail_table").on("change", function(){
        console.log("change HIJO");
    });

image

GardiHuts commented 6 years ago

Uno de los problemas derivado de esta incidencia, es que si tenemos un mantenimiento de UDA en el que en el detalle tenemos 2 combos anidados, al acceder en modo edición, no se selecciona el combo hijo. Al entrar por primera vez en un detalle (el combo padre esta vacío), el populateForm informa el valor a los campos. El primer combo se carga correctamente pero el segundo se carga sin valor, aparentemente por que se lanza 3 veces el evento change del hijo.

image

En cambio, si cerramos el dialogo de detalle y volvemos a abrir el mismo registro, (el combo no se ha vaciado y tiene aun el valor), el populateForm informa los valores y al no cambiar el valor del padre, no se lanza 3 veces el evento change del hijo, solo se lanza una vez, no se realiza la recarga del hijo y se informa correctamente.

image

Por si os puede servir para reproducir el error.

hmartinez85 commented 6 years ago

Se ha subido una corrección con respecto al error en los changes.

Un saludo.