第二章:Odoo Web框架?
在上一章中,我們學習了如何使用Owl框架及其不同的概念?,F在我們可以學習如何使用Odoo JavaScript框架,該框架是建立在Owl之上的。
在 awesome_tshirt
模塊中,我們將構建我們的 Awesome 儀表板。這將是一個很好的機會,可以發現 Odoo JavaScript 框架中的許多有用功能。
目標

本章節中每個練習的解決方案都托管在 官方Odoo教程存儲庫 中。
1. 新布局?
Odoo Web客戶端中的大多數屏幕都使用相同的布局:頂部有一個控制面板,帶有一些按鈕,下面是一個主要的內容區域。這是通過使用 Layout組件 <https://github.com/odoo/odoo/blob/16.0/addons/web/static/src/search/layout.js>`_在 `@web/search/layout
中實現的。
Exercise
更新位于 awesome_tshirt/static/src/
的 AwesomeDashboard
組件,使用 Layout
組件。您可以使用 Layout
組件的 display
屬性,如下所示: { "top-right": false, "bottom-right": false }
。

另請參閱
3. 調用服務器,添加一些統計信息?
讓我們通過添加一些卡片(請參見Owl培訓中制作的 Card
組件)包含一些統計信息來改進儀表板。有一個路由 /awesome_tshirt/statistics
將執行一些計算并返回一個包含一些有用信息的對象。
每當我們需要調用特定的控制器時,我們需要使用 rpc 服務 。它只導出一個函數來執行請求: rpc(route, params, settings)
。
這里是有關各種參數的簡短說明:
route
是目標路由,以字符串形式表示。例如/myroute/
。params
是一個包含所有將提供給控制器的數據的對象。(可選)settings
是用于請求的高級控制??梢允蛊潇o默,或使用特定的 xhr 實例。(可選)
Example
一個基本的請求可能是這樣的:
setup() {
this.rpc = useService("rpc");
onWillStart(async () => {
const result = await this.rpc("/my/controller", {a: 1, b: 2});
// ...
});
}
Exercise
修改
Dashboard
以使用rpc
服務。在
onWillStart
鉤子中調用統計路由/awesome_tshirt/statistics
。在儀表板中顯示幾張包含以下內容的卡片:
本月新訂單數量
本月新訂單的總金額
本月每個訂單的T恤平均數量
本月取消訂單數量
從“新建”到“已發送”或“已取消”的訂單平均處理時間

4. 緩存網絡調用,創建服務?
如果你打開瀏覽器的開發者工具,在網絡選項卡中,你可能會發現每次顯示客戶端操作時都會調用 /awesome_tshirt/statistics
。這是因為每次掛載 Dashboard
組件時都會調用 onWillStart
鉤子。但在這種情況下,我們可能更希望只在第一次調用時執行,因此我們實際上需要在 Dashboard
組件之外維護一些狀態。這是服務的一個很好的用例!
Example
下面的示例注冊了一個簡單的服務,每5秒顯示一次通知。
import { registry } from "@web/core/registry";
const myService = {
dependencies: ["notification"],
start(env, { notification }) {
let counter = 1;
setInterval(() => {
notification.add(`Tick Tock ${counter++}`);
}, 5000);
},
};
registry.category("services").add("myService", myService);
Exercise
實現了一個新的
awesome_tshirt.statistics
服務。它應該提供一個名為
loadStatistics
的函數,一旦調用,就執行實際的rpc,并始終返回相同的信息。也許可以使用 memoize 實用函數,來自
@web/core/utils/functions
在
Dashboard
組件中使用此服務。檢查它是否按預期工作
另請參閱
5. 顯示餅圖?
每個人都喜歡圖表(?。?,因此讓我們在我們的儀表板中添加一個餅圖,顯示每個尺碼銷售的T恤比例:S/M/L/XL/XXL。
在這個練習中,我們將使用 Chart.js。這是圖表視圖使用的圖表庫。但是,默認情況下它不會被加載,因此我們需要將其添加到我們的資產包中,或者進行懶加載(通常更好,因為如果用戶不需要它,他們就不必每次加載chartjs代碼)。
Exercise
另請參閱
6. 更進一步?
以下是一些小的改進建議,如果您有時間可以嘗試一下:
Exercise
確保你的應用程序可以進行 翻譯 (使用
env._t
)點擊餅圖的某個部分應該打開一個列表視圖,其中包含所有具有相應大小的訂單。
添加一個 SCSS 文件,嘗試更改儀表板操作的背景顏色。
