vuvivian's blog

越努力,越幸运.

  1. 1. 视图
  2. 2. 字段部件
  3. 3. 装饰与列表视图一样,字段小部件对装饰具有简单的支持。装饰的目标是有一种简单的方法来根据记录当前状态指定文本颜色。例如,
  • 视图

“视图”一词有多种含义。本节是关于视图的JavaScript代码的设计,而不是Arch的结构或其他任何内容。
2017年,Odoo用新架构替换了先前的视图代码。主要需要将呈现逻辑与模型逻辑分开。
视图(一般意义上)现在用4个部分描述:视图、控制器、渲染器和模型。这4个部分的API在AbstractView、AbstractController、AbstractRenderer和AbstractModel类中进行了描述。

img

视图结构.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表达式,它将使用记录作为评估上下文进行评估。
本文最后更新于 天前,文中所描述的信息可能已发生改变