正如我们在Interactivity part of Getting started中可以看到的那样,一个回调函数可以接受多个输入但始终具有单个输出。有没有更好的方法来用Plotly执行Dash的多个输出?
假设我们有两个单独的块,输入更改后必须更新。当然,最简单的方法是为每个块创建两个具有相同输入的回调函数。问题是请求执行两次,而一次只能获取所有数据。
@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,
]
)
所以也许有更优雅的方式来输出两个或多个元素与一个请求?
也许这可以通过将'app.layout'设置为一个函数来实现,因此您可以使用动态布局。 查看文档[live-updates](https://plot.ly/dash/live-updates)部分中的“页面加载更新”。 – jackdbd
@jackdbd,谢谢。不完全是我所需要的,但非常有用 –