任务栏Systray
Systray是界面菜单栏的右侧部分,Web客户端在其中显示一些小部件,如消息菜单。
当菜单创建SystrayMenu时,它将查找所有已注册的小部件,并将它们作为子小部件添加到适当的位置。
目前没有针对Systray小工具的特定API。它们应该是简单的小部件,并且可以像使用trigger-up方法的其他小部件一样与环境通信。
添加一个新得任务栏项目
没有Systray注册表。添加小部件的正确方法是将其添加到类变量systraymenu.items中。
1 | var SystrayMenu = require('web.SystrayMenu'); |
排序Ordering
在将小部件添加到自己之前,Systray菜单将按Sequence属性对项目进行排序。如果原型上不存在该属性,则将使用50。因此,要将Systray项目定位在靠后,可以设置一个非常高的序列号(反之,将其放在靠前的是一个较低的序列号)。MySystrayWidget.prototype.sequence = 100;
翻译管理
有些翻译是在服务器端进行的(基本上是由服务器呈现或处理的所有文本字符串),但是静态文件中有需要翻译的字符串。它目前的工作方式如下:
- 每个可翻译字符串都带有特殊的函数_t(可在js模块web.core中找到)
- 服务器使用这些字符串生成正确的PO文件。
- 每当加载Web客户机时,它将调用route/web/web client/translations,它返回所有可翻译术语的列表
- 在运行时,每当调用函数时,它都会在该列表中查找以查找转换,如果找不到转换,则返回它或原始字符串。
请注意,在文档翻译模块中,从服务器的角度对翻译进行了更详细的解释。
javascript中的翻译有两个重要功能:_t和_lt。区别在于_lt是以懒惰的方式进行的。
1 | var core = require('web.core'); |
在本例中,由于在加载模块时翻译尚未准备就绪,因此必须使用_lt。
注意,翻译功能需要注意。参数中给定的字符串不应是动态的。
会话Session
Web客户端提供了一个特定的模块,其中包含一些特定于用户当前会话的信息。一些显著的键是:
- uid:当前用户的id(来自于表 res.users 的ID)
- user_name: 用户的名字,字符串类型
- 用户上下文(context [用户id,语言和时区])
- partner_id: 与当前用户关联的合作伙伴的ID
- db:当前使用的数据库名字
添加信息到会话中
加载/web路由后,服务器将在模板中插入一些会话信息和脚本标记。信息将从模型ir.http的方法session_info中读取。因此,如果要添加特定信息,可以通过重写session_info方法并将其添加到字典中来完成。
1 | from odoo import models |
现在,通过在会话中读取该值,可以在javascript中获取该值:
1 | var session = require('web.session'); |
请注意,此机制旨在减少Web客户端准备就绪所需的通信量。它更适合于计算成本较低的数据(缓慢的session_info调用将延迟为每个人加载Web客户端),以及在初始化过程早期需要的数据。