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
我正在开发一个 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