Ошибка при очистке значений раскрывающегося меню в da sh с помощью кнопки очистки - PullRequest
0 голосов
/ 08 июля 2020

Я пытаюсь предоставить пользователю возможность очистить значения, введенные в раскрывающемся списке, с помощью кнопки очистки, но при запуске приложения я получаю следующую ошибку (из-за которой я не могу выбрать параметр в раскрывающийся список):

Невозможно прочитать свойство 'length', равное null

Это мой код для кнопки очистки:

html.Button('Clear', id = 'clear', n_clicks = 0, style={'color' : '#FFFFFF', 'fontSize' : '12px', 'width': '150px'})

А это мой код для функции очистки:

@app.callback(  
    Output('Month', 'options'),
    [Input('clear', 'n_clicks')]
)
def clearDropDown1(n_clicks):
        if n_clicks: 
            return None

1 Ответ

0 голосов
/ 10 июля 2020

Спасибо. Я запустил его локально, и проблема вызвана обратным вызовом. Он обновляет свойство 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 вместо параметров, если вы хотите, чтобы она работала как кнопка очистки для всех из них вместе.

...