第 2 章:杂项¶
在上一任务中,我们学习了如何创建字段和视图。功能丰富的 Odoo Web 框架还有很多值得探索的内容,让我们在本章中深入探索更多吧!
在 第 1 章:字段与视图 结尾处,这是我们探索 JavaScript Web 框架所取得的进展。¶
目标
本章各练习的答案托管在 官方 Odoo 教程仓库 中。
1. 与通知系统交互¶
Note
本任务依赖于 上一练习。
在使用 打印标签 按钮处理一些 T 恤任务之后,很明显我们应该给 print_label 动作一些反馈,告知它已完成(或失败,例如打印机未连接或缺纸)。
更多内容
2. 添加一个系统托盘项¶
我们敬爱的领导者希望密切关注新订单。他想随时看到新的未处理订单数量。让我们用一个系统托盘项来实现。
系统托盘 项是出现在系统托盘中的元素,系统托盘是位于导航栏右侧的一个小区域。系统托盘用于显示通知并提供对某些功能的访问入口。
Exercise
创建一个系统托盘组件,连接到我们之前制作的统计服务。
用它来显示新订单的数量。
点击它应打开一个列表视图,显示所有这些订单。
加分项:把该信息添加到会话信息中,从而避免发起初始 RPC。会话信息由服务器在初始响应中提供给 Web 客户端。
3. 真实场景更新¶
到目前为止,上面的系统托盘项除非用户刷新浏览器否则不会更新。我们通过定期(例如每分钟)调用服务器重新加载信息来实现它。
Exercise
tshirt服务应定期重新加载其数据。
现在问题来了:如何通知系统托盘项需要重新渲染自己?可以用多种方式实现,但在本练习中,我们选择使用最 声明式 的方式:
Exercise
4. 向命令面板添加一条命令¶
现在,让我们看看如何与命令面板交互。命令面板是一项允许用户快速访问应用内各种命令和功能的功能。在 Odoo 界面中按下 CTRL+K 即可访问它。
5. 给组件打猴子补丁¶
通常,我们可以利用现有的扩展点来实现所需功能,例如在注册表中注册某个对象。但有时,我们想要修改某些没有这种机制的东西。在这种情况下,我们必须采用一种不太安全的定制方式:猴子补丁(monkey patching)。Odoo 中几乎所有内容都可以打补丁。
我们敬爱的领导 Bafien 听说,员工若时刻被注视,表现会更好。由于他无法亲自盯着每一位员工,他把任务交给你:更新用户界面,在控制面板中添加一只闪烁的红眼睛。点击这只眼睛应打开一个对话框,显示以下消息:”Bafien is watching you. This interaction is recorded and may be used in legal proceedings if necessary. Do you agree to these terms?”
Exercise
继承 ControlPanel 组件 的
web.Breadcrumbs模板,在面包屑旁添加一个图标。你可以使用fa-eye或fa-eyes图标。使用 dialog 服务 对该组件 打补丁,以便在点击时显示消息。你可以使用 ConfirmationDialog。
将 CSS 类
blink添加到表示眼睛的元素上,并把以下代码粘贴到位于你补丁目录下的新 CSS 文件中。.blink { animation: blink-animation 1s steps(5, start) infinite; -webkit-animation: blink-animation 1s steps(5, start) infinite; } @keyframes blink-animation { to { visibility: hidden; } } @-webkit-keyframes blink-animation { to { visibility: hidden; } }
6. 获取某个客户的订单¶
让我们看看如何使用一些标准组件来构建一个集自动补全、数据获取和模糊查找于一体的强大功能。我们将在仪表盘中添加一个输入框,以便轻松搜索某个客户的所有订单。
Exercise
更新
tshirt_service.js以添加一个loadCustomers方法,该方法返回一个 promise,返回所有客户的列表(且只执行一次调用)。将 AutoComplete 组件 添加到仪表板中,位于控制面板的按钮旁边。
使用 tshirt 服务获取客户列表,并在 AutoComplete 组件中显示,通过 fuzzyLookup 方法进行过滤。
7. 重新引入小猫模式¶
让我们为 Odoo 添加一个特殊模式:只要 URL 中包含 kitten=1,我们就在 Odoo 背景中显示一只小猫,因为我们喜欢小猫。
Exercise
创建一个
kitten服务,它应借助 router 服务 检查当前 URL 哈希的内容。如果 URL 中设置了kitten,则把o-kitten-mode类添加到文档 body 上。在
kitten_mode.scss中添加以下 SCSS:.o-kitten-mode { background-image: url(https://upload.wikimedia.org/wikipedia/commons/5/58/Mellow_kitten_%28Unsplash%29.jpg); background-size: cover; background-attachment: fixed; } .o-kitten-mode > * { opacity: 0.9; }
向命令面板添加一条命令来切换小猫模式。切换小猫模式应当同时切换
o-kitten-mode类,并相应地更新当前 URL。
8. 懒加载我们的仪表板¶
这并非完全必要,但这个练习很有意思。假设我们很棒的仪表盘是一个大型应用,可能包含多个外部库以及大量代码/样式/模板。并且假设只有部分用户在某些业务流程中使用该仪表盘。那么在大多数情况下懒加载它,以加快 Web 客户端的加载速度,会是一件很有意思的事。
那么,让我们动手吧!
Exercise
修改清单文件以创建一个新 资源包
awesome_tshirt.dashboard。把 awesome 仪表板代码添加到该资源包中。如有需要,可以创建文件夹并移动文件。
从
web.assets_backend资源包中移除该代码,以免重复加载。
到目前为止,我们只是把仪表盘从主资源包中移除;现在我们想要懒加载它。目前,动作注册表中还没有注册任何客户端动作。
Exercise
创建一个新文件
dashboard_loader.js。把注册
AwesomeDashboard的代码复制到仪表板加载器中。将
AwesomeDashboard注册为一个 LazyComponent。修改仪表盘加载器中的代码,使用懒加载组件
AwesomeDashboard。
如果您打开浏览器开发者工具的 Network 选项卡,应该会看到 awesome_tshirt.dashboard.min.js 现在仅在首次访问仪表盘时加载。
更多内容