Estoy trabajando en una aplicación de Earth Engine donde tengo 2 widgets de tipo ui.Seleccione que sean dependientes entre sí (dependientes bidireccionales). Es decir, cuando hago un cambio en uno de ellos, cambia la lista en el otro y viceversa.
El comportamiento es correcto, salvo que cuando quiero volver a seleccionar la opción que estaba antes del cambio, no funciona. Debido a que la secuencia de comandos del generador de elementos que completan los widgets siempre está seguro de que la selección anterior está en la lista de elementos nuevos (modificados).
Aquí están las dos implementaciones de widgets.
var select_date_init = ui.Select({ items: Object.keys(dates_init), onChange:function(key) { var selected_end = select_date_end.getValue(); var selected_init_end_date = dates_init[key][1]; var new_list = Object.keys(get_dates_list(selected_init_end_date,'')); select_date_end.items().reset(new_list); //select_date_end.items = new_list if(selected_end !== null){ select_date_end.setValue(selected_end,false) }else{ select_date_end.setValue(null,false) } }, placeholder: 'Seleccionar semestre 1...' }); var select_date_end = ui.Select({ items: Object.keys(dates_end), onChange: function(key) { var selected_init = select_date_init.getValue(); var selected_end_init_date = dates_init[key][0]; var new_list = Object.keys(get_dates_list(system_date_init,selected_end_init_date)); select_date_init.items().reset(new_list); //select_date_init.items = new_list; if(selected_init !== null){ select_date_init.setValue(selected_init,false) }else{ select_date_init.setValue(null,false) } }, placeholder: 'Seleccionar semestre 2...' }); El problema parece estar en la parte setValue() del script. Los elementos de los dos widgets se modifican correctamente, pero siempre muestra el texto predeterminado 'Seleccionar semestre 1...' o 'Seleccionar semestre 2...' después de la acción de cambio.
La acción que necesito es:
Primer paso:
Seleccione de 1 -> esto cambia la lista en 2 (originalmente vacía, por lo que no se necesita preselección)
Segundo paso:
Seleccione de 2 -> esto cambia la lista en 1 (pero mantiene la opción seleccionada en 1)
Si el usuario quiere:
Cambie la selección de 1 (o 2) -> actualice la otra lista -> mantenga las opciones preseleccionadas
Aquí está el enlace al script de trabajo completo https://code.earthengine.google.com/b251b24ffbc37775e4e5eede8dcbd11f
La función onChange de su botón #2 está reiniciando su botón #1 cada vez. Solo necesita descomentar las líneas 209-216 de su código, por lo que la función onChange de su variable var select_date_end se ve así:
var select_date_end = ui.Select({ items: Object.keys(dates_end), onChange: function(key) { var selected_init = select_date_init.getValue(); var selected_end_init_date = dates_init[key][0]; var new_list = Object.keys(get_dates_list(system_date_init,selected_end_init_date)); }, placeholder: 'Seleccionar semestre 2...' });Ver código: https://code.earthengine.google.com/9e2d4f13e9bfa57e1df3673a6d82684e