odoo 在tree后面增加按钮并绑定事件
- 首先我们要自定义js文件,名字可以随意取
"use strict";
var ListController = require('web.ListController'); // 这个是要用的插件默认写法
ListController.include({
renderButtons: function ($node){
var $buttons = this._super.apply(this, arguments);
// if 语句解释 this.modelName是当前模型 将 custom.import 换成你想在哪个模型tree上加按钮
// 如你要在sale.order 上加按钮 代码如下
// if (this.modelName === "sale.order")
if (this.modelName === "custom.import") {
// button_01 是你加上去的按钮 button 的属性是可以增加 .click(this.proxy("xxxx")) xxxx 是你绑定的js方法
var button_01 = $("<button id='btn' type='button' class='btn btn-secondary btn_margin'>自定义按钮</button>").click(this.proxy("deal_things"))
// 下一句 是将 button_01添加到tree按钮的最后面一个位置
this.$buttons.append(button_01);
}
return $buttons;
},
// 这是按钮绑定的方法
deal_things: function () {
var self = this;
var records = this.getSelectedIds();
// 使用odoo rpc调用模型的方法
// model:你要调用的模型
// method:对应模型的方法
self._rpc({
model: 'custom.import',
method: 'do_info',
args: [records]
},
[]
);
},
});
// viewRegistry.add('custom_import_tree_dashboard_upload', ExpensesListViewDashboardUpload);
});
- 在views文件下的template.xml文件中引用我们自定义的js文件
<odoo>
<data>
<template id="assets_backend" name="custom_page_assets" inherit_id="web.assets_backend">
<xpath expr="." position="inside">
<!-- src 后面我们刚才自定义的js文件的路径-->
<script type="text/javascript" src="/custom_import/static/src/js/custom_inport.js"></script>
</xpath>
</template>
</data>
</odoo>
- 在__manifest__.py文件中引用template.xml文件
'data': [
'security/ir.model.access.csv',
'views/templates.xml', // 这里应用模板文件
'views/custom_import_view.xml',
]
效果展示
odoo12 和14 测试有用,
odoo14还有一个 非常方便在tree视图中添加按钮的方法
14这样就能加。