我能够理解callbacks
dash-table-experiment
如何在DataTable
中app.layout = Div/Html layout
成为callback
的一部分。
但是,当DataTable
生成为def generate_table(tdf, max_rows=200):
return dt.DataTable(rows=tdf.to_dict('records'),
columns=tdf.columns,
row_selectable=True,
filterable=False,
sortable=False,
selected_row_indices=[],
id="datatable-gapminder"
)
并且它不是静态布局的一部分时,如何创建@app.callback(
Output('datatable-gapminder', 'selected_row_indices'),
[Input('graph-gapminder', 'clickData')],
[State('datatable-gapminder', 'selected_row_indices')])
def update_selected_row_indices(clickData, selected_row_indices):
if clickData:
for point in clickData['points']:
if point['pointNumber'] in selected_row_indices:
selected_row_indices.remove(point['pointNumber'])
else:
selected_row_indices.append(point['pointNumber'])
return selected_row_indices
?
Attempting to assign a callback to the
component with the id "datatable-gapminder" but no
components with id "datatable-gapminder" exist in the
app's layout.
如果我说
include Irvine32.inc
.code
main PROC
mov eax,5
add eax,6
call DumpRegs
exit
main ENDP
END main
我收到错误
{{1}}
答案 0 :(得分:2)
您收到该错误,因为标识为datatable-gapminder
的组件尚未出现在布局中。
如果要为尚未在布局中的组件创建回调,则必须禁止回调异常。
app.config.supress_callback_exceptions = True
我认为你还需要一个功能来提供布局。默认情况下,Dash应用程序将app.layout
存储在内存中。如果将app.layout设置为某个函数,则可以在每个页面加载时提供动态布局。请参阅here。
def serve_layout():
layout = html.Div(
children=[
# dt.DataTable()
],
)
return layout
app.layout = serve_layout
答案 1 :(得分:0)
我不知道,如果目前这一切都可以用破折号完成。但是,您可以考虑创建一个空数据表组件,并简单地更新回调中的所有属性(当然,除了id :))。如果用户不应该在启动时看到空数据表,可以在开头将其设置为隐藏div,并确保它在回调中可见。
如果您决定尝试这种方法,请确保每次调用创建数据表的回调时都返回有意义的值。即使这些值是空的。