使用清除按钮清除破折号中的下拉菜单的值时出错

时间:2020-07-08 18:08:42

标签: python html css web-applications plotly-dash

我正在尝试向用户提供一个选项,以通过“清除”按钮清除在下拉列表中输入的值,但是在运行应用程序时,我收到以下错误消息(由于无法在其中选择一个选项)下拉菜单):

无法读取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 :(得分:0)

谢谢。我已经在本地运行它,问题是由回调引起的。它将options的属性更新为None,应用程序无法读取该属性的属性length(JS中的null)。

您的回调可以采用这样的形式(为我工作):

@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删除他们所做的选择?

编辑:

为回应您的评论,您将需要一个多输出回调。它将采用以下形式:

@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道具而不是选项。