我正在编写一个最初无法访问数据库的Dash应用程序,因此需要等待数据库连接后才能设置初始应用程序状态。
因此,我想运行一个稍后会设置应用程序状态的函数,但是设置状态的唯一方法似乎是使用@app.callback()
装饰器,但是问题是它们需要一个属性或状态变量来设置在射击前先观看,但就我而言,我不是在观看Dash应用的一部分,而是在观看外部内容。
如何在Dash中执行此操作?
例如:
app = Dash(routes_pathname_prefix='/dash/trend/')
app.layout = html.Div(children=[
dcc.Dropdown(
options=get_field_options(),
id='field_select',
multi=True,
)
])
@app.callback(
dash.dependencies.Output('field_select', 'options'),
[
# What do I put here as an input??
]
)
def update_fields(href):
return get_field_options()
答案 0 :(得分:2)
您可以使用plotly破折号存储组件来保留事件所需的一些数据。
dcc.Store(id='local', storage_type='local'),
答案 1 :(得分:0)
使用隐藏的html.Div()
存储您的信息。可以为空:
html.Div(id='application-state', style={'display': 'none'})
因此您的代码应如下所示:
import dash
import dash_html_components as html
import dash_core_components as dcc
from dash.dependencies import Input, Output
app = Dash(routes_pathname_prefix='/dash/trend/')
app.layout = html.Div(children=[
dcc.Dropdown(
options=get_field_options(),
id='field_select',
multi=True,
),
html.Div(id='application-state', style={'display': 'none'})
])
@app.callback(
[Output('field_select', 'options')],
[Input('application-state', 'children')])
def update_fields(href):
if href =! None:
return get_field_options()
else:
return []
您的external part
应该更新相应的隐藏div。您可以将其更改为能够存储要传输到仪表板可视化的信息的任何其他组件。您找到此问题域here的最佳来源和技巧。
用于返回有效对象的if else
部分有点棘手。请让我知道是否有回调输出错误,例如Expected 1 output but received None
或类似的内容。