odoo13 tree視圖增加按鈕

之前寫過(guò)一遍oooo10版本的增加按鈕方法,在odoo13中已經(jīng)不太適用,現(xiàn)在更新一下在13版本中增加按鈕的方法,方法其實(shí)都大同小異,直接上代碼

  • xml:qweb設(shè)置按鈕模板
<?xml version="1.0" encoding="UTF-8"?>

<templates>
    <t t-name="add_tree_button.product_test_button">
        <!--前兩個(gè)class用于設(shè)置button樣式 固定寫法,最后一個(gè)需設(shè)置一個(gè)唯一值用于綁定事件-->
        <button type="button" class="btn btn-primary o_product_test_button">
            測(cè)試tree按鈕
        </button>
    </t>
</templates>

這個(gè)xml需要在manifest中寫入qweb項(xiàng)才會(huì)生效

  • js:設(shè)置按鈕的邏輯方法
odoo.define('add_tree_button.product_tree_button', function (require) {
    "use strict";
    var core = require('web.core');
    var ListController = require('web.ListController');
    var ListView = require('web.ListView');
    var viewRegistry = require('web.view_registry');

    var QWeb = core.qweb;

    var ProductListController = ListController.extend({
        /**
         * 繼承tree視圖的控制器,增加我們自定義按鈕的綁定時(shí)間
         * @override
         */
        renderButtons: function () {
            this._super.apply(this, arguments);
            // 渲染qweb模板,展示測(cè)試按鈕,這里的值為模板名
            this.$buttons.append($(QWeb.render("add_tree_button.product_test_button", this)));
            var self = this;
            // 按類名綁定按鈕點(diǎn)擊事件
            this.$buttons.on('click', '.o_product_test_button', function () {
                // 1.打開視圖
                self.do_action({
                    type: 'ir.actions.act_window',
                    res_model: 'product.template',
                    target: 'new',
                    views: [[false, 'form']],
                    flags: {mode: 'edit'},
                }, {
                    on_reverse_breadcrumb: function () {
                        self.reload();
                    },
                    on_close: function () {
                        self.reload();
                    }
                });

                // 2.執(zhí)行python代碼
                // if (self.getSelectedIds().length == 0) {
                //     return;
                // }
                // return self._rpc({
                //     model: 'product.template',
                //     method: 'test_print',
                //     // 傳入選擇數(shù)據(jù)的id
                //     args: [self.getSelectedIds()],
                // });
                
            });
        }
    });

    var ProductListView = ListView.extend({
        /**
         * 繼承tree視圖,將上面的控制邏輯加入視圖中
         * @override
         */
        config: _.extend({}, ListView.prototype.config, {
            Controller: ProductListController,
        }),
    });

    // 注冊(cè)視圖,上面使用派生繼承,沒有修改原本的tree視圖,所以需要注冊(cè)后使用
    viewRegistry.add('product_tree_button', ProductListView );
});

  • xml: 引入自定義js
<?xml version="1.0" encoding="utf-8"?>
<odoo>
    <!--引入js-->
    <template id="assets_backend" inherit_id="web.assets_backend">
        <xpath expr="script[last()]" position="after">
            <script type="text/javascript" src="/add_tree_button/static/src/js/list_view.js"></script>
        </xpath>
    </template>
</odoo>
  • xml:在tree視圖中指定使用自定義的list_view
<?xml version="1.0" encoding="utf-8"?>
<odoo>
    <record id="product_template_tree_view_inherit" model="ir.ui.view">
        <field name="name">product.template.tree.view.inherit</field>
        <field name="model">product.template</field>
        <field name="inherit_id" ref="product.product_template_tree_view"/>
        <field name="arch" type="xml">
            <xpath expr="http://tree" position="attributes">
                <!--修改js_class屬性改為使用自定義的list_view-->
                <attribute name="js_class">product_tree_button</attribute>
            </xpath>
        </field>
    </record>
</odoo>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容