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-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-extendt-name

在这两种情况下,然后使用任意数量的子指令执行更改:t-jquery

<t t-extend="base.template">
    <t t-jquery="ul" t-operation="append">
        <li>new element</li>
    </t>
</t>

这些指令采用 CSS 选择器。此选择器用于扩展模板,以选择应用了指定的上下文节点t-jqueryt-operation

append

节点的正文追加在上下文节点的末尾(在上下文节点的最后一个子节点之后)

prepend

节点的正文位于上下文节点的前面(在上下文节点的第一个子节点之前插入)

before

节点的正文插入到上下文节点之前

after

节点的正文紧跟在上下文节点之后

inner

节点的主体替换上下文节点的子节点

replace

节点的主体用于替换上下文节点本身

attributes

节点的主体应该是任意数量的元素,每个元素都有一个属性和一些文本内容,上下文节点的命名属性将被设置为指定的值(如果已经存在,则替换,否则添加)attributename

无操作

如果指定了 no,则模板正文被解释为 javascript 代码,并在上下文节点为t-operationthis