在Plotly Dash仪表板中允许动态对象创建和删除的最佳方法是什么?

问题描述 投票:0回答:2

[目前,我有一个存储Card元素字典的类,每个字典都是唯一的。班级还可以生成这些卡片并将其添加到词典中或从词典中删除卡片。但是,我不确定如何最好地通过回调函数执行此操作,因为在制作卡之前,卡的ID不存在,并且该功能也不直接在Dash框架内,因为字典对象充当存储对象的中介。

基本上,我想知道通过回调动态创建和销毁对象的最佳方法是什么?

谢谢!

python flask callback dashboard plotly-dash
2个回答
0
投票

仅根据您的问题,我有一些立即的建议(因为您没有发布任何工作代码)。1.默认情况下,生成所有卡片元素。它们可以生成,但不能“显示”2.添加回调,以根据用例动态切换卡的显示/渲染。这样,您便可以在回调中使用卡片元素ID。

希望这会有所帮助。


0
投票

假设您要避免对将不使用的构建卡进行额外的计算,我建议创建一个创建每个卡并将这些函数存储在字典中的。 ((您也可以使用允许特定性的参数创建通用函数)

my_card_functions = {
  'id_1': make_id_1,
  'id_2': make_id_2,
}

可以这样制作卡片:

my_id = 'id_1'
f = my_card_functions[my_id] # will break if id isn't registered
my_card = f()

您可以将要创建的卡存储在dcc.store对象中。这是您可能会考虑的一些代码示例:

# Pretend these are structured properly
dcc.Store(id='cards_data')
html.Div(id='my_cards',children=[])

@app.callback(
  Output('my_cards','children'),
  [Input('cards_data','data')],
  [State('my_cards','children')]
)
def make_cards(data, children):
  """Makes cards for each id"""
  if not data:
    raise PreventUpdate

  # The following code is not correct but serves as a demonstrative example
  # Some data structure manipulation is necessary to access 
  # the ids from the children elements
  children_ids = [x['id'] for x in children]

  # Assuming your data looks something like this:
  # {'add':['id_1','id_2']}

  for x in data['add']:
    if x not in children_ids:
      f = my_card_functions[my_id]
      my_card = f()

      # Store values
      children.append(my_card)

  return children

注意,这种方法不能解决卡的移除问题。这可以轻松完成,但可能需要更动态地使用缓存。

© www.soinside.com 2019 - 2024. All rights reserved.