“视图”一词有多种含义。本节是关于视图的JavaScript代码的设计,而不是Arch的结构或其他任何内容。
2017年,Odoo用新架构替换了先前的视图代码。主要需要将呈现逻辑与模型逻辑分开。
视图(一般意义上)现在用4个部分描述:视图、控制器、渲染器和模型。这4个部分的API在AbstractView、AbstractController、AbstractRenderer和AbstractModel类中进行了描述。
视图结构.png
- 视图是工厂。它的工作是获取一组字段、arch、上下文和其他一些参数,然后构造一个控制器/渲染器/模型三元组。
视图的作用是用正确的信息正确地设置MVC模式的每一部分。通常,它必须处理arch字符串,并提取视图中彼此所需的数据。
请注意,视图是一个类,而不是一个小部件。一旦它的工作完成,它就可以被丢弃。 - 渲染器有一个作业:表示在DOM元素中查看的数据。每个视图都可以以不同的方式呈现数据。此外,它应该监听适当的用户操作,并在必要时通知其父级(Controller)。
渲染器是MVC模式中的V. - 模型:它的工作是获取并保持视图的状态。通常,它以某种方式表示数据库中的一组记录。该模型是“业务数据”的所有者。它是MVC模式中的M.
- Controller:它的工作是协调渲染器和模型。此外,它是Web客户端其余部分的主要入口点。例如,当用户在搜索视图中更改某些内容时,将使用适当的信息调用控制器的更新方法。
它是MVC模式中的C.
视图的JS代码已设计为可在视图管理器/操作管理器的上下文之外使用。它们可以用于客户端操作,也可以显示在公共网站上(对资源进行一些处理)
字段部件
该AbstractField类是在一个视图中的所有控件的基类,用于支持他们所有的视图(目前为:表格,列表,看板)。
v11字段小部件与先前版本之间存在许多差异。让我们提一下最重要的一些:
- 小部件在所有视图之间共享(表单/列表/看板)。无需再复制实现。请注意,可以为视图设置特定版本的窗口小部件,方法是在视图注册表中为视图名称添加前缀:list.many2one将优先于many2one选择。
- 小部件不再是字段值的所有者。它们仅表示数据并与视图的其余部分进行通信。
- 小部件不再需要能够在编辑和只读模式之间切换。现在,当需要进行此类更改时,窗口小部件将被销毁并再次重新呈现。这不是问题,因为他们无论如何都不拥有自己的价值
- 字段小部件可以在视图之外使用。他们的API略显笨拙,但它们的设计是独立的。
装饰与列表视图一样,字段小部件对装饰具有简单的支持。装饰的目标是有一种简单的方法来根据记录当前状态指定文本颜色。例如,
1 | <field name = “state” decoration-danger = “amount&lt; 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和text-bf除外,它们由odoo处理并分别对应于斜体和粗体)。请注意,decoration属性的值应该是一个有效的python表达式,它将使用记录作为评估上下文进行评估。