来源:https://supportuae.wordpress.com/2017/09/06/how-to-add-button-in-tree-view-header-near-create-and-import-buttons-odoo10/
本文假定我已经创建了一个自定义模块名称“tree_menu”,该模块里有一个model名叫project.project。
1). 创建一个JavaScript文件 (例如:tree_menu/static/src/js/tree_view_button.js),用来处理自定义按钮的点击事件:
odoo.define('tree_menu.tree_view_button', function (require){
"use strict";
var core = require('web.core');
var ListView = require('web.ListView');
var QWeb = core.qweb;
ListView.include({
render_buttons: function($node) {
var self = this;
this._super($node);
//自定义按钮click事件绑定处理方法
this.$buttons.find('.o_list_tender_button_create').click(this.proxy('tree_view_action'));
},
/**
* 实现自定义按钮的事件
*/
tree_view_action: function () {
this.do_action({
type: "ir.actions.act_window",
name: "product",
res_model: "product.template",
views: [[false,'form']],
target: 'current',
view_type : 'form',
view_mode : 'form',
flags: {'form': {'action_buttons': true, 'options': {'mode': 'edit'}}}
});
return { 'type': 'ir.actions.client','tag': 'reload', } }
});
});
2). 然后,创建一个XML(例如:tree_menu/static/src/xml/tree_view_button.xml)用来在特定条件下替换原有的“创建”按钮,比如发现model是我自己的model(project.project)
<?xml version="1.0" encoding="UTF-8"?>
<template id="template" xml:space="preserve">
<t t-extend="ListView.buttons">
<t t-jquery="button.o_list_button_add" t-operation="replace">
<button t-if="widget.model == 'purchase.order'" class="btn btn-primary btn-sm o_list_tender_button_create" type="button">Create Tender</button>
<button t-if="widget.model != 'purchase.order'" class="btn btn-primary btn-sm o_list_button_add" type="button">Create</button>
</t>
</t>
</template>
3). 再然后,把第一步编写的JS增加到odoo模板中(在web.asset_backend中),需要自己创建一个XML文件 (例如:tree_menu/views/tree_view_asset.xml),
当然,如果自己模块中已有这种XML文件,也可以添加到已有XML文件中
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<template id="assets_backend" name="tree view menu" inherit_id="web.assets_backend">
<xpath expr="." position="inside">
<script type="text/javascript" src="/tree_menu/static/src/js/tree_view_button.js"></script>
</xpath>
</template>
</data>
</odoo>
4). 最后,在__manifest__.py文件中,把第二步创建 的XML文件增加到“qweb”属性中,把第三步创建的文件增加天“data”属性中:
{
'name': 'odoo10 Tree View JS Menu',
'version': '1.0',
'category': 'General',
'summary': 'odoo10 Tree View JS Menu',
'description': """ odoo10 Tree View JS Menu """,
'author': 'Ananthu',
'website': 'http://www.codersfort.com',
'depends': ['base','purchase','web'],
'data':[
'views/tree_view_asset.xml',
],
'qweb': ['static/src/xml/tree_view_button.xml'],
'demo': [],
'installable': True,
'application': True,
'auto_install': False,
}
5). 最最后,启动odoo,升级模块,再到project.project model的TreeView界面,顶上就出现了自定义按钮,按下之后出来产品的Form界面。