Translation management(翻译管理)
一些翻译是在服务器端进行的(基本上是由服务器呈现或处理的所有文本字符串), 但是本地静态文件中有一些字符串也需要翻译。目前的工作方式如下:
var core = require('web.core');
var _t = core._t;
var _lt = core._lt;
var SomeWidget = Widget.extend({
exampleString: _lt('this should be translated'),
...
someMethod: function () {
var str = _t('some text');
...
},
});
在这个例子中, _lt是必须的,因为当模块加载完翻译并没有就绪。
注意:参数中给定的字符串不应是动态的
Session
web client提供了一个特定的模块,其中包含一些特定于用户当前会话的信息。值得注意的关键是:
from odoo import models
from odoo.http import request
class IrHttp(models.AbstractModel):
_inherit = 'ir.http'
def session_info(self):
result = super(IrHttp, self).session_info()
result['some_key'] = get_some_value_from_db()
return result
现在,通过在会话中读取,可以在javascript中获得该值
var session = require('web.session');
var myValue = session.some_key;
...
注意: 该机制旨在减少web客户端准备就绪所需的通信量.它更适合于计算成本较低的数据,以及初始化过程需要的数据。
视图
“视图”一词有不止一个含义。本节是关于视图的javascript代码的设计,而不是arch的结构或其他任何内容。
在2017年, Odoo用新的架构替换了以前的视图代码. 主要是将渲染逻辑与模型逻辑分离.
视图包括四个方面的内容: a View, a Controller, a Renderer and a Model.
对应的API分别是: AbstractView, AbstractController, AbstractRenderer and AbstractModel classes.
View(视图)像是一个工厂. 它的工作是获取一组fields,arch,然后构造一个Controller/Renderer/Model的三元组合。
View的作用是正确设置MVC模式的每一部分.请注意,视图是一个类,而不是widget。一旦它的工作完成,它就可以被丢弃不用。
Renderer(渲染器)的工作就是渲染. 每个视图都可以以不同的方式渲染数据,它应该监听适当的用户操作,并在必要时通知其parent(Controller)渲染器是MVC模式中的V.
Model(模型):它的任务是获取并保持视图的状态. 通常, 它以某种方式表示数据库中的一组记录。 模型是“业务数据”的所有者,它是MVC中的M.
Controller(控制器):它的工作是协调渲染器和模型. 此外,它是web client其余部分的主要入口点. 例如, 当用户更改了一些search视图的内容, 将使用适当的信息调用控制器的更新方法.它是MVC中的C.
Field Widgets(字段widget)
web client应用的很大一部分是关于如何创建和编辑数据的,其中的大部分工作都是在字段 widget的帮助下完成, ODOO知道字段类型以及应如何显示和编辑值的具体细节。
AbstractField
AbstractField 是视图中所有widget的基类,因为所有视图都支持它们(目前支持:Form,List,Kanban)
ODOO v11版本字段窗口widget与以前的版本有很多不同。让我们关注最重要的一点:
widgets在所有视图类型之间共享,不再需要复制实现,请注意,可以通过加前缀的方式为视图提供特定版本的widget,list.many2one 将优先于 many2one.
widget不再是字段值的所有者。它们仅表示数据并与视图的部分通信.
这些widget不再需要能够在编辑和只读模式之间切换. 现在, 当需要这样的更改时,widget将被销毁并再次重新发布。
字段widget可以在视图之外使用. 他们的API有点难以处理,但在设计上是独立的.
Decorations(修饰)
例如list视图,字段widgets支持简单的修饰
目标是有一种简单的方法来根据记录的当前状态指定文本颜色. 例如,
<field name="state" decoration-danger="amount < 10000"/>
有效的修饰名称包括:
decoration-bf
decoration-it
decoration-danger
decoration-info
decoration-muted
decoration-primary
decoration-success
decoration-warning
每个decoration-X将映射到css类text-X,它们是标准的bootstrap css 类 (text-it and text-bf除外, 由ODOO处理,分别对应斜体和粗体). 注意,Note 修饰属性的值应该是有效的python表达式.
中亿丰数字集团有限公司 姜振建