Спасибо. Я запустил его локально, и проблема вызвана обратным вызовом. Он обновляет свойство options
до None
, и приложение не может прочитать свойство length
этого (null
в JS).
Ваш обратный вызов может принимать форму вот так (сработало для меня):
@app.callback(
Output('Month', 'options'),
[Input('clear', 'n_clicks')]
)
def clearDropDown1(n_clicks):
if n_clicks:
return []
return [{'label': 'January', 'value': 1}, {'label': 'February', 'value': 2},
{'label': 'March', 'value': 3}, ]
Проблема в том, что когда вы нажимаете кнопку, обратный вызов больше не будет иметь в нем никаких опций. Знаете ли вы, что существует опора clearable
, которая позволяет пользователям удалять X из сделанного выбора?
edit:
В ответ на ваш комментарий вам понадобится мульти- обратный вызов вывода. Он будет иметь следующую форму:
@app.callback(
[
Output('Month', 'options'),
Output('Year', 'options'),
...
],
[Input('clear', 'n_clicks')]
)
def clearDropDown1(n_clicks):
if n_clicks:
return [], [], ...
return [{'label': 'January', 'value': 1}, {'label': 'February', 'value': 2},
{'label': 'March', 'value': 3}, ],
[{'label': 2020, 'value': 2020}, {'label': 2019, 'value': 2019}], ...
Функция должна возвращать значение для каждого Output
в декораторе. Я бы сказал, что вам, вероятно, нужно обновить опору value
вместо параметров, если вы хотите, чтобы она работала как кнопка очистки для всех из них вместе.