odoo14在tree视图的表头增加按钮调用后端方法

本文介绍了如何在Odoo的tree视图中添加自定义按钮,主要涉及使用js文件定义按钮行为,通过ListController扩展功能,并在xml文件中定位并插入按钮。操作包括定义js事件处理函数,使用rpc调用后端方法,以及在xml中布局按钮。
摘要由CSDN通过智能技术生成

odoo在form视图上增加按钮是比较方便的,但是tree视图就麻烦一些,需要借助js来实现

我对js不太熟悉,此处为同事帮忙做的,可能有解释不到位的情况,请谅解

这是我同事的地址,大家可以去看一下,写的很好

koron7的博客_CSDN博客-odoo,python,泛微E9领域博主

1. 首先在模块文件的static/src/js下增加要添加的js文件:

 js代码如下

odoo.define('receipt_follow_up.btn_confirm_submission', function (require) {
    "use strict";
    var ListController = require('web.ListController');
    ListController.include({
        renderButtons: function () {
            this._super.apply(this, arguments);
            if (this.$buttons) {
                var btn = this.$buttons.find('.receipt_follow_up_btn_confirm_submission');
                btn.on('click', this.proxy('receipt_follow_up_btn_confirm_submission'));
            }
        },

        receipt_follow_up_btn_confirm_submission: function () {
            var self = this;
            var records = this.getSelectedIds();
            self._rpc({
                model: 'receipt.follow.up',
                method: 'btn_confirm_submission',
                args: [records],
            }).then(function () {
                self.update({}, { reload: true });
            });
        },
    });
});

首先定义 var btn = this.$buttons.find('.receipt_follow_up_btn_confirm_submission');

这里find里的内容是自己定义的,用作区分

然后绑定click事件  btn.on('click', this.proxy('receipt_follow_up_btn_confirm_submission'));

随后在方法中定义tree中选择的记录var records = this.getSelectedIds();

然后调用rpc,其中model就是后端你定义的模型了,method就是要调用的方法,args传入选择的记录集,此时js内容完成

2.在static/src/xml下增加对应的xml文件来降按钮放到指定位置

xml内容如下

<?xml version="1.0" encoding="UTF-8"?>
<templates id="receipt_follow_up_update_button" xml:space="preserve">
    <t t-extend="ListView.buttons">
      <t t-jquery="button.o_list_button_save" t-operation="before">
          <button t-if="widget.modelName == 'receipt.follow.up'" class="btn btn-primary receipt_follow_up_btn_confirm_submission" type="button">确认提交</button>
     </t>
    </t>
</templates>

打开要加按钮的tree查看对应位置的官方原生按钮的class,例如我的是放到了保存按钮的前边,而保存按钮的类为 o_list_button_save,所以 

<t t-jquery="button.o_list_button_save" t-operation="before">这里的t-jquery后边指定到o_list_button_save类,然后t-operation="before"是降我定义的按钮放到它的前边,当然也可以写成after

3.在views目录下增加一个xml文件用来加载js文件:

<?xml version="1.0" encoding="UTF-8"?>
<odoo>
    <template id="receipt_follow_up_button" inherit_id="web.assets_backend" name="receipt_follow_up_button">
        <xpath expr="script[last()]" position="after">
            <script type="text/javascript" src="/sales_contract/static/src/js/receipt_follow_up_buttons.js"/>
            <script type="text/javascript" src="/sales_contract/static/src/js/update_widget.js"/>
        </xpath>
    </template>
</odoo>

 odoo15好像是改为在manifest文件中加载,我这是14,需要这样加载

xml文件记得在manifest中加载:

 views中的xml文件需要写在data中,static/src/xml下的xml文件需要在qweb中,odoo15版本的写法会有区别,可自行查看

到此结束

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值