2016-11-12 220 views
6

我一直在玩一段時間的散景,現在我正在創建交互式地塊並在線嵌入它們的步驟(例如,在WordPress的帖子中)。然而,儘管我花了一些時間從散景網站的例子中檢查和測試代碼,但我很難完全理解curdoc()的目的。爲了創建帶有小部件的散景應用程序似乎是必要的,但是從我在資源中找到的內容來看,我不太瞭解它。curdoc()的用途是什麼?

回答

5

一些術語是有序的。創建散景圖時,它由許多較小的對象組成,例如字形,範圍,數據源,工具等。而繪圖本身基本上是所有這些其他對象的容器。所有這些對象,包括劇情,都被稱爲型號。其他模型類似於佈局(例如rowcolumn)以及Bokeh內置的窗口小部件(例如,SliderSelect)。

對於Python端的這些模型中的每一個,都有一個相應的JavaScript對象,它實際上實現了模型,並在瀏覽器中執行繪圖或交互的所有工作。 Bokeh的工作方式是它可以自動將Python模型集合成一堆JSON,然後BokehJS可以從中重新構建所有相應的JS對象。

A 文檔是散景型號的集合。它是最小的「序列化單元」。也就是說,將單個Python模型轉換爲JSON(如Plot)往往沒有意義,因爲該對象可能引用了很多其他對象(如軸或字形等)。因此,一組模型一個散景文檔都可以以有意義的方式一起變成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數據來源也更新(從而使情節改變)。這種自動雙向同步是所有t都能提供的他使用Bokeh服務器提供複雜的交互功能。