我正在尝试向用户提供一个选项,以通过“清除”按钮清除在下拉列表中输入的值,但是在运行应用程序时,我收到以下错误消息(由于无法在其中选择一个选项)下拉菜单):
无法读取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
答案 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
道具而不是选项。