odoo Qweb继承
Qweb继承
Qweb继承是通过qweb语法来书写的。但是思路跟odoo的传统视图继承基本一致,先定位元素,再进行扩展
一般有两种继承方式
1、模板继承
创建一个新的模块更改已有的Qweb模板
模板继承通过使用两个指令执行:1、t-inherit:继承的模板的名称;2、t-inherit-mode :继承模式,分别有:基础视图继承,扩展视图继承。
基础视图继承:<t t-name="child.template" t-inherit="base.template" t-inherit-mode="primary">
<xpath expr="//ul" position="inside">
<li>new element</li>
</xpath>
</t>
<t t-name="child.template" t-inherit="base.template" t-inherit-mode="primary">
<xpath expr="//ul" position="inside">
<li>new element</li>
</xpath>
</t>
扩展视图继承:
<t t-inherit="base.template" t-inherit-mode="extension">
<xpath expr="//tr[1]" position="after">
<tr><td>new cell</td></tr>
</xpath>
</t>
<t t-inherit="base.template" t-inherit-mode="extension">
<xpath expr="//tr[1]" position="after">
<tr><td>new cell</td></tr>
</xpath>
</t>
2、旧的继承机制(odoo15开发文档标注已弃用)
模板继承是通过指令执行的,该指令将模板的名称作为参数进行更改。t-extend
该指令在与指令结合使用时将充当主继承,并在单独使用时充当扩展继承。t-extend
t-name
在这两种情况下,然后使用任意数量的子指令执行更改:t-jquery
<t t-extend="base.template">
<t t-jquery="ul" t-operation="append">
<li>new element</li>
</t>
</t>
这些指令采用 CSS 选择器。此选择器用于扩展模板,以选择应用了指定的上下文节点:t-jquery
t-operation
append
节点的正文追加在上下文节点的末尾(在上下文节点的最后一个子节点之后)
prepend
节点的正文位于上下文节点的前面(在上下文节点的第一个子节点之前插入)
before
节点的正文插入到上下文节点之前
after
节点的正文紧跟在上下文节点之后
inner
节点的主体替换上下文节点的子节点
replace
节点的主体用于替换上下文节点本身
attributes
节点的主体应该是任意数量的元素,每个元素都有一个属性和一些文本内容,上下文节点的命名属性将被设置为指定的值(如果已经存在,则替换,否则添加)attribute
name
- 无操作
如果指定了 no,则模板正文被解释为 javascript 代码,并在上下文节点为t-operation
this
t-extend
t-extend
t-name
t-jquery
<t t-extend="base.template">
<t t-jquery="ul" t-operation="append">
<li>new element</li>
</t>
</t>
t-jquery
t-operation
append
节点的正文追加在上下文节点的末尾(在上下文节点的最后一个子节点之后)
prepend
节点的正文位于上下文节点的前面(在上下文节点的第一个子节点之前插入)
before
节点的正文插入到上下文节点之前
after
节点的正文紧跟在上下文节点之后
inner
节点的主体替换上下文节点的子节点
replace
节点的主体用于替换上下文节点本身
attributes
节点的主体应该是任意数量的元素,每个元素都有一个属性和一些文本内容,上下文节点的命名属性将被设置为指定的值(如果已经存在,则替换,否则添加)attribute
name
如果指定了 no,则模板正文被解释为 javascript 代码,并在上下文节点为t-operation
this