如何替换curdoc
How to replace curdoc
如何替换散景服务器应用程序中的当前文档?
我将以前的文档另存为 json_string
。如果我这样做
set_curdoc(Document.from_json_string(json_string))
这似乎可以正确更改 curdoc(),但是新文档不会显示在浏览器中。
我找到了解决方法,其他地方建议更新现有布局的子项而不是更新整个 curdoc()。
我做到了,但我必须扩展一点才能从保存在 json 字符串中的文档中做到这一点。
我不得不将所有模型的 document
属性从导入的文档切换到 curdoc() (否则它会抱怨模型属于另一个文档)
假设我导入的文档和当前文档都只有一个根:
new_doc = Document.from_json_string(json_string)
new_grid_models = collect_models(new_doc.roots[0])
for elem in new_grid_models:
try:
elem.document = curdoc()
except AttributeError:
elem._document = curdoc()
new_children = new_doc.roots[0].children
del new_doc
grid.children = new_children
之后 python 回调需要重新影响适当的导入模型。
我在这里放了一个示例应用程序:
save_and_load app on Bitbucket
您可以只清除当前文档,然后添加一个新文档:
- 将创建文档(bokeh 应用程序)的全部代码放入一个函数中
create_curdoc()
。在这个函数的最后你有 curdoc().add_root(layout)
.
- 调用函数
create_curdoc()
一次创建并显示文档
- 用
curdoc().clear()
清除当前文档
- 使用更新后的数据再次调用函数
create_curdoc()
(或创建文档的另一个函数)以创建并显示新文档。
如果您在再次调用该函数之前不清除,则新文档将添加到旧文档的底部。
例如,您可以通过当前文档中的按钮回调触发更新。
按钮设置可能如下所示:
def replace():
curdoc().clear()
create_curdoc()
replace_button = Button(
label="Replace Document",
button_type= "danger")
replace_button.on_click(replace)
如何替换散景服务器应用程序中的当前文档?
我将以前的文档另存为 json_string
。如果我这样做
set_curdoc(Document.from_json_string(json_string))
这似乎可以正确更改 curdoc(),但是新文档不会显示在浏览器中。
我找到了解决方法,其他地方建议更新现有布局的子项而不是更新整个 curdoc()。
我做到了,但我必须扩展一点才能从保存在 json 字符串中的文档中做到这一点。
我不得不将所有模型的 document
属性从导入的文档切换到 curdoc() (否则它会抱怨模型属于另一个文档)
假设我导入的文档和当前文档都只有一个根:
new_doc = Document.from_json_string(json_string)
new_grid_models = collect_models(new_doc.roots[0])
for elem in new_grid_models:
try:
elem.document = curdoc()
except AttributeError:
elem._document = curdoc()
new_children = new_doc.roots[0].children
del new_doc
grid.children = new_children
之后 python 回调需要重新影响适当的导入模型。
我在这里放了一个示例应用程序: save_and_load app on Bitbucket
您可以只清除当前文档,然后添加一个新文档:
- 将创建文档(bokeh 应用程序)的全部代码放入一个函数中
create_curdoc()
。在这个函数的最后你有curdoc().add_root(layout)
. - 调用函数
create_curdoc()
一次创建并显示文档 - 用
curdoc().clear()
清除当前文档
- 使用更新后的数据再次调用函数
create_curdoc()
(或创建文档的另一个函数)以创建并显示新文档。
如果您在再次调用该函数之前不清除,则新文档将添加到旧文档的底部。
例如,您可以通过当前文档中的按钮回调触发更新。
按钮设置可能如下所示:
def replace():
curdoc().clear()
create_curdoc()
replace_button = Button(
label="Replace Document",
button_type= "danger")
replace_button.on_click(replace)