Предотвращение сброса выпадающего меню Da sh к значению по умолчанию в многостраничном приложении - PullRequest
0 голосов
/ 23 февраля 2020

В настоящее время я пытаюсь создать многостраничное приложение в Python Da sh (немного изменив некоторые материалы из учебников), и мне интересно, как вы можете предотвратить раскрывающееся меню в например, первая страница возвращается к значению по умолчанию, когда вы возвращаетесь на эту страницу.

app.layout = html.Div([

    dcc.Location(id='url', refresh=False),
    html.Div(id='page-content'),
])

index_page = html.Div([
    html.Br(),
    dcc.Link('Go to Page 1', href='/page-1'),
    html.Br(),
    dcc.Link('Go to Page 2', href='/page-2'),
])

page_1_layout = html.Div([
    dcc.Dropdown(
        id='page-1-dropdown',
        options=[{'label': i, 'value': i} for i in ['LA', 'NYC', 'MTL']],
        value='LA'
    ),
    html.Div(id='page-1-content'),
    html.Br(),
    dcc.Link('Go to Page 2', href='/page-2'),
    html.Br(),
    dcc.Link('Go back to home', href='/'),

])


page_2_layout = html.Div([
    html.Div(id='page-2-content'),
    html.Br(),
    dcc.Link('Go to Page 1', href='/page-1'),
    html.Br(),
    dcc.Link('Go back to home', href='/')
])

@app.callback(Output('page-1-content', 'children'),
              [Input('page-1-dropdown', 'value')])
def page_1_dropdown(value):
    return html.Div([
        html.Div(['You have selected "{}"'.format(value)]),#
    ])

# Update the index
@app.callback(Output('page-content', 'children'),
              [Input('url', 'pathname')])
def display_page(pathname):
    if pathname == '/page-1':
        return page_1_layout
    elif pathname == '/page-2':
        return page_2_layout
    else:
        return index_page
    # You could also return a 404 "URL not found" page here

if __name__ == '__main__':
    app.run_server(debug=True)

В приведенном выше примере, когда я выбираю, например, «NY C» в раскрывающемся меню, а затем перейдите на страницу 2, прежде чем вернуться на стр. 1, выпадающий список вернулся к стандартному «LA».

Кажется, что это довольно просто предотвратить, но я не нашел способа сделай это пока.

Заранее спасибо!

1 Ответ

0 голосов
/ 26 февраля 2020

Для этого вам нужно будет использовать State . Поэтому запишите состояние события для раскрывающегося списка, поэтому, если оно было щелкнуто, отметьте состояние. И в вашем обратном вызове для page_1_dropdown проверьте состояние и обновите до выбранного значения. Что-то на линии:

@app.callback(Output('page-1-dropdown', 'value'),
          [Input('page1_link', 'n_clicks')],
          [State('page-1-dropdown', 'value')])
def drop_down(n_clicks, input1):
    if (n_clicks) >=1 :
        return(input1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...