如何在TreeView视图顶部的“创建” 和“导入”按钮旁边增加自定义按钮

admin 2018-1-31 5808


来源: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界面。


最新回复 (1)
  • Sapphire 2018-5-16
    引用 2
    我按照你说的这个操作了一下,在models中继承了一个product.product,其他都是复制的你的,在project.project  model的TreeView界面,没有出现自定义按钮。

    问题:
    1、product.template是继承了product.product,那么product.template的tree视图上是不是应该也是自定义的按钮。
    2、你在xml视图中判断的是purchase.order的视图是不是替换原来的Create按钮,这个对不对?
返回