setValue 不适用于依赖的 Earth Engine ui.Select 小部件

setValue not workin on dependant Earth Engine ui.Select widget

我正在开发一个 Earth Engine 应用程序,其中我有 2 个 ui.Select 类型的小部件,它们相互依赖(双向依赖)。也就是说,当我对其中一个进行更改时,它会更改另一个中的列表,反之亦然。

行为是正确的,只是当我想重新选择更改前的选项时,它不起作用。由于填充小部件的项目生成器脚本总是确保之前的选择在新的(修改的)项目列表中。

这是两个小部件的实现

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...'
});

问题似乎出在脚本的 setValue() 部分。两个小部件的项目已正确更改,但在更改操作后它总是显示 'Seleccionar semestre 1...' 或 'Seleccionar semestre 2...' 默认文本。

我需要的操作是:

第一步:
Select 从 1 -> 这会更改 2 上的列表(原来是空的,因此不需要预先选择)
第二步:
Select 来自 2 -> 这会更改 1 上的列表(但保留 1 中的选定选项)
如果用户想要:
从 1(或 2)更改选择 -> 更新另一个列表 -> 保留预选选项

这是完整工作脚本的 link https://code.earthengine.google.com/b251b24ffbc37775e4e5eede8dcbd11f

您的按钮 #2 的 onChange 函数每次都会重置您的按钮 #1。您只需要取消注释代码的第 209-216 行,因此变量 var select_date_end 的 onChange 函数如下所示:

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...'
});

见代码:https://code.earthengine.google.com/9e2d4f13e9bfa57e1df3673a6d82684e