首页 > 解决方案 > 正确使用 t-attf-class 来禁用带有 Odoo 的标题按钮中的按钮

问题描述

我一直在尝试使用t-attf-class以禁用headerOdoo (v11) 部分中的按钮。我在视图 xml 文件的标题中创建了一个按钮,并将其与模型中的操作链接,该操作工作正常。我正在尝试根据state对象的条件禁用按钮,我在 Odoo 的源代码中找到了以下模板:

<t t-name="FieldStatus.content.button">
    <t t-set="disabled" t-value="!clickable || i.selected"/>
    <button type="button" t-att-data-value="i.id" t-att-disabled="disabled ? 'disabled' : undefined"
        t-attf-class="btn btn-sm o_arrow_button btn-#{i.selected ? 'primary' : 'default'}#{disabled ? ' disabled' : ''}">
        <t t-esc="i.display_name"/>
    </button>
</t>

所以我试图对这个按钮做同样的事情:

<form string="Form Name">
<header>
...
<button name="action_delete" string="Delete" type="object" t-attf-class="btn-danger #{state == 'done'?' disabled': ''}" t-att-disabled="state == 'done' ? 'disabled': undefined"/>
...
</header>

该模型包含一个state采用以下值之一的字段:['draft', 'pending', 'done'] 此操作action_delete在模型中定义,并且可以正常工作。我尝试使用<attribute>按钮内部,以及按钮t-if内部和外部的属性,但没有运气。

PS这个问题是不同的,答案不适用于这种情况,也可以使用invisible更容易的属性来实现,但我们不想这样做。

标签: odooodoo-11qweb

解决方案


为什么不直接使用默认的 Odoo 方式,使其在某些州不可见?

<button name="action_delete" string="Delete" type="object"
    attrs="{'invisible': [('state', 'in', ['state1', 'state2'])]}" />

推荐阅读