正如我们在入门的交互部分中看到的,一个回调函数可以接受多个输入,但始终只有一个输出。
假设我们有两个单独的块必须在输入更改后更新。当然,最简单的方法是为每个块创建两个具有相同输入的回调。问题是请求执行两次,而一次足以获取所有数据。
@app.callback(
dash.dependencies.Output('element_1', 'children'),
[dash.dependencies.Input('filter', 'value')])
def callback_element_1(filter):
return get_data(filter).el1
@app.callback(
dash.dependencies.Output('element_2', 'children'),
[dash.dependencies.Input('filter', 'value')])
def callback_element_2(filter):
return get_data(filter).el2
我发现的解决方案是将这些元素包装在单个块中,并使用单个请求完全重新渲染它。但是在这种情况下,包装器中的所有静态内容也将被刷新,尤其是当初始元素在 DOM 中彼此相距很远时。
@app.callback(
dash.dependencies.Output('wrapper', 'children'),
[dash.dependencies.Input('filter', 'value')])
def callback_element_wrapper(filter):
data = get_data(filter)
return html.Div(
children=[
data.el1,
# more static content
data.el2,
]
)
那么也许有更优雅的方式来通过一个请求输出两个或多个元素?