odoo12 View翻译
共同结构
视图对象公开了许多字段,除非另有说明,否则它们是可选的。
name (强制)
仅在某种列表中查找一个时,它仅用作视图的助记符/描述
model
链接到视图的模型(如果适用)(不适用于QWeb视图)
priority
客户端程序可以通过id或通过提出请求(model, type)。对于后者,将搜索正确类型和模型的所有视图,并priority返回编号最小的视图(它是“默认视图”)。
priority还定义了视图继承期间的应用程序顺序
arch
视图布局的描述
groups_id
Many2many 允许查看/使用当前视图的组的字段
inherit_id
当前视图的父视图,请参阅继承,默认情况下未设置
mode
继承模式,请参阅继承。如果 inherit_id未设置,mode则只能是primary。如果 inherit_id设置,extension默认情况下可以显式设置为primary
application
定义可切换视图的网站功能。默认情况下,始终应用视图
banner_route
要获取并预先添加到视图的路由地址。
如果设置了此属性, 则将获取控制器路径URL并显示在视图上方。来自控制器的json响应应包含“html”键。
如果html包含样式表<link>标记,它将被删除并附加到<head>。
要与后端进行交互,您可以使用<a type=“action”>标记。请查看AbstractController的_onActionClicked方法的文档(addons / web / static / src / js / views / abstract_controller.js)以获取更多详细信息。
只有扩展AbstractView和AbstractController的视图才能使用此属性,如Forms,Kanban, Lists,…
例:
<tree banner_route="/module_name/hello" />
class MyController(odoo.http.Controller):
@http.route('/module_name/hello', auth='user', type='json')
def hello(self):
return {
'html': """
<div>
<link href="/module_name/static/src/css/banner.css"
rel="stylesheet">
<h1>hello, world</h1>
</div> """
}
Inheritance
视图匹配
如果请求(model, type)视图,mode=primary则匹配具有正确模型和类型的视图以及最低优先级
当请求视图时id,如果其模式不是primary其 最接近的父模式primary匹配
视图分辨率
分辨率arch为请求/匹配的primary 视图生成最终结果:
如果视图具有父级,则完全解析父级,然后应用当前视图的继承规范
如果视图没有父级,arch则按原样使用
extension查找当前视图的具有模式的子项,并将其继承规范应用于深度优先(应用子视图,然后应用子视图,然后应用其兄弟)
应用子视图的结果产生最终结果 arch
继承规范
继承规范由元素定位器组成,以匹配父视图中的继承元素,以及将用于修改继承元素的子元素。
有三种类型的元素定位器可用于匹配目标元素:
xpath具有expr属性的元素。expr是应用于当前的XPath 表达式2arch,它找到的第一个节点是匹配
field具有name属性的元素,将第一个field 与相同的元素匹配name。匹配期间将忽略所有其他属性
任何其他元素:匹配具有相同名称和相同属性(忽略position和version属性)的第一个元素
继承规范可能有一个可选position属性,指定匹配节点应如何更改:
inside (默认)
继承规范的内容将附加到匹配的节点
replace
继承规范的内容替换匹配的节点。任何仅包含$0在规范内容中的文本节点将被匹配节点的完整副本替换,从而有效地包装匹配的节点。
after
在匹配的节点之后,继承规范的内容被添加到匹配节点的父节点
before
继承规范的内容在匹配节点之前添加到匹配节点的父节点
attributes
继承规范的内容应该是attribute具有name属性和可选主体的元素:
如果attribute元素有一个主体,name则在匹配的节点上创建一个以其命名的新属性,并将 attribute元素的文本作为值
如果attribute元素没有主体,name则从匹配节点中删除以其命名的属性。如果不存在此类属性,则会引发错误
此外,position move可以作为一个规范的一个直接子inside,replace,after或before position归因于移动节点。
<xpath expr = “// @ target” position = “after” >
<xpath expr = “// @ node” position = “move” />
</ xpath>
<field name = “target_field” position = “after” >
<field name = “my_field” position = “move” />
</ field>
视图的规格按顺序应用。