概念
筆記本就是文件
筆記本是一個 Divooka 文件,它的入口圖是一個實現 Notebook Application 的 Events 圖。它的 Build 回撥負責筆記本的佈局;它的其他圖(通常是 Function 圖)負責響應儲存格。文件能擁有的其他一切,它都可以擁有:資料成員、其他圖、包、嵌入的資源。
站點、頁面、儲存格
- 站點就是整個筆記本:一個名稱、一個可選圖示,以及它的各個頁面。
- 頁面是筆記本的一項功能,列在側邊欄中。Page 之後新增的所有內容都放在該頁面上,直到下一個 Page。
- 儲存格是一個輸入與一個輸出的組合:一個滑塊和它顯示的內容,一個文字方塊和它的迴應。沒有輸入的儲存格——Markdown、Html、Heading、Image——是靜態的;Show 儲存格沒有輸入,但會在頁面載入時計算它要顯示的內容。
佈局是固定的:Build 只佈局頁面一次,之後變化的只有值、輸出,以及哪些輸入處於啟用狀態。如果 Build 為不同存取者佈局出不同的內容,就會被拒絕,因為一半是一種佈局、一半是另一種佈局的頁面根本不成其為頁面。
佈局筆記本的兩種方式
逐條語句。 在 Build 之後串聯 Notebook Application 自己的節點——Page、Markdown、Slider、Text Box——就像編寫 Streamlit 指令碼一樣。這是通常的做法。
作為值。 Notebook Cells 中的每個節點都把一個儲存格作為值生成——Slider、Text Box、Group 等等——你可以對它們連線、把它們儲存在陣列中,並用 Add Page 或 Add Cell 放置它們。兩種方式佈局出的是同樣的筆記本。
函式響應儲存格
每個輸入都有一個函式引腳——On Change,按鈕則是 On Click——每當輸入的值發生變化時,就會用該值呼叫這個引腳所指定的函式:
| 輸入 | 函式接收 |
|---|---|
| Number、Slider | 一個數字 |
| Text Box、Text Area、Choice、Date | 文字(日期格式為 yyyy-MM-dd) |
| Checkbox、Toggle | 一個真值 |
| Upload | 上傳的檔案,或空值 |
| 輸入組 | 它的所有欄位,一次全部傳入,型別為 Notebook Inputs |
| Button | 無 |
在引腳上使用 Edit Function,會生成一個簽名完全匹配的 Function 圖。函式返回儲存格要顯示的內容。如果函式失敗,儲存格會顯示錯誤,頁面其餘部分照常工作。
輸入的函式在輸入第一次變化時才執行,因此頁面開啟時各輸入的輸出都是空的。在 Build 中使用 Answer On Load,可以讓每個輸入在頁面開啟時就響應其初始值——由滑塊驅動的圖表通常需要這樣。按鈕和上傳仍然會等待,因為它們沒有初始值。
每位存取者獨享一份文件
每次載入頁面就是一個會話,每個會話都是文件的一個新例項:筆記本建立並構建這個例項,從而把該存取者的儲存格繫結到它上面。因此:
- 同一存取者的儲存格共享例項的資料成員。 一個儲存格的函式可以設定另一個儲存格的函式所讀取的成員。
- 存取者之間從不共享成員。 使用同一個筆記本的兩位同事各自擁有自己的值、輸出和成員。
- Input 按標籤讀取本會話中另一個儲存格的目前值;Set Enabled 按標籤啟用或禁用另一個輸入。Get Session Id 提供一個名稱,可用於存取者的函式所寫入的檔案。
共享值
有些東西應該只載入一次並提供給所有人:一張大表格、一個訓練好的模型。Site Started 回撥在第一位存取者到來之前、在站點自己的例項上執行一次;Set Shared 把一個值儲存在那裡,Shared 則可以從任何存取者的函式中讀取它。這是存取者之間唯一共有的狀態,而且是顯式的。
Session Started 和 Session Ended 在每位存取者到來和離開時執行。
只讀與啟用
- Page Read Only 使目前頁面變為只讀:輸入顯示其初始值且不能更改,每個儲存格顯示其函式針對這些值給出的結果。
dvn --read-only對整個站點執行同樣的操作。 - Last Read Only 和 Last Disabled 修改最後新增的儲存格;Set Enabled 從函式中呼叫,可在筆記本執行時修改另一個輸入。
- Hide Run All 從目前頁面去掉 Run All。

輸出
函式的返回值決定存取者看到什麼,而資料如何繪製由頁面決定,而不是由計算決定:

| 函式返回 | 頁面顯示 |
|---|---|
| 無 | 無——輸出保持摺疊 |
| 文字、數字、真值 | 文字 |
| Notebook Outputs 中的 Markdown、Html、Code | Markdown、HTML 片段(兩者都會清除指令碼),或帶語法高亮的程式碼塊 |
| Html Page | 一個完整頁面,位於獨立的框架中 |
| Divooka 影像,或 Picture | 圖片,按原樣顯示 |
| 來自 Plotting 工具箱的圖形或圖表 | 以互動方式繪製的圖表,Image 檢視顯示 Divooka 自己的渲染結果 |
| Notebook Outputs 中的 Chart、Line Chart、Scatter Chart、Plot Function、Plot With Parameter | 由頁面繪製的圖表 |
| 表格 | 表格,帶有檢視選擇器——Table、Line、Scatter、Bar、Histogram——以及整張表格的 CSV 下載 |
| 數字列表 | 這些數字,以表格或圖表形式顯示 |
| Download | 下載檔案的連結 |
| 儲存格陣列 | 這些儲存格的輸出,巢狀顯示 |

表格只把前一千行傳送到頁面;CSV 包含所有行。Last Prefer View 設定表格或圖表輸出開啟時使用的檢視。