在绘图破折号中的回调之外更新应用程序状态

时间:2019-05-24 04:08:26

标签: python plotly plotly-dash

我正在编写一个最初无法访问数据库的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()

2 个答案:

答案 0 :(得分:2)

您可以使用plotly破折号存储组件来保留事件所需的一些数据。

dcc.Store(id='local', storage_type='local'),

documented filters list

答案 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或类似的内容。