正如我們在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,謝謝。不完全是我所需要的,但非常有用 –