之前寫過(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>