curdoc()的目的是什么?

eti*_*ier 15 bokeh

我已经玩了一段时间的散景,现在我正处于创建互动情节并在线嵌入它们的步骤(例如,在WordPress的帖子中).

然而,即使我花了一些时间来审查和测试散景网站示例中的代码,我也很难理解curdoc()的目的究竟是什么.为了创建一个带有小部件的散景应用程序似乎是必要的,但是从我在资源中找到的内容来看,我并不十分理解它.

big*_*dot 18

一些术语是有序的.当您创建散景图时,它由许多较小的对象组成,例如字形,范围,数据源,工具等.而图本身基本上是所有这些其他对象的容器.所有这些对象,包括Plot,都称为模型.其他模型是布局(例如row和column)以及Bokeh内置的小部件(例如,Slider或Select).

对于Python方面的这些模型中的每一个,都有一个实际实现模型的相应JavaScript对象,并在浏览器中完成绘制或交互的所有工作.Bokeh的工作方式是它可以自动将一组Python模型转换成一堆JSON,然后BokehJS可以重新构成所有相应的JS对象.

一个文件是散景的集合模型.它是最小的"序列化单元".也就是说,将单个Python模型转换为JSON(如a Plot)通常没有意义,因为该对象可能引用了许多其他对象(如轴或字形等).因此,一组模型在Bokeh Document可以以有意义的方式一起变成JSON.

无论您是制作独立文档(例如,使用output_file),还是在Bokeh服务器上创建Bokeh应用程序,以上所有内容都适用.对于Bokeh应用程序,应用程序代码本身实际上只是修改文档的一种方法.因此,每当创建Bokeh应用程序会话时(即,只要用户打开Bokeh服务器上的散景应用程序的URL),就会为其创建一个新的空白 Document,并运行应用程序代码,其中该Document会话的新内容可用作curdoc().然后,应用程序代码可以向此文档添加内容(例如,curdoc().add_root(...)应用程序代码完成后,"已完成"文档将转换为JSON并发送到BokehJS以向用户显示.

最后要提到的是,Bokeh服务器的主要目的是确保以这种方式创建的Bokeh文档自动与浏览器中的用户视图保持同步.如果用户擦洗滑块,则更新Slider浏览器中JS文档中的模型,该模型也会自动更新Bokeh服务器中Python文档中的python Slider对象.应用程序可以对此做出响应,并进行其他更改(可能更新Python数据源),这会导致JS数据源也更新(从而使绘图更改).这种自动双向同步是通过Bokeh服务器提供所有复杂的交互功能的原因.

  • 这是一个很棒的答案,它怎么不是文档/教程的一部分?我可以添加无用的一边,“curdoc()”代表“当前文档”对象。 (3认同)
  • 没有人能想到一切。开源的承诺是,它可以在用户、维护者和其他人之间进行更广泛的协作,从而可以共同完成比任何个人甚至小团队所能完成的更多工作。我鼓励您通过提交 [github 问题](https://github.com/bokeh/bokeh/issues) 来帮助改进文档(理想情况下,也参与实施) (2认同)
  • 感谢善意的话语,即使只是这个问题也是有价值的贡献。另外,仅供参考,Bokeh 有自己的 Discourse,对于更多开放式问题,它通常比 SO 更好:https://discourse.bokeh.org/ (2认同)