odoo12 中在tree视图中新增自定义按钮
-
我需要在odoo的tree视图上面的创建/导入按钮旁边增加新的自定义按钮,我按照其他的示例写了一部分代码,现在我在前端可以显示我增加的按钮,但是点击按钮后没有任何反应,下面的是我的js 代码:
odoo.define('dwapp', function(require){ "use strict"; var show_button_model = ['dwapp',]; var core = require('web.core'); var myListView = require('web.ListView'); var QWeb = core.qweb; console.log("33333"); myListView.include({ render_buttons: function($node){ var self = this; this._super($node); console.log("123455"); var tree_model = this.dataset.model; for(var i = 0; i < show_button_model.length; i++){ console.log("66666"); this.$buttons.find('.o_list_tender_button_tree').click(this.proxy('tree_view_action')); } }, tree_view_action: function() { console.log("222222"); this.do_action({ type: "ir.actions.act_window", name: "数据库APP", res_model: 'dwapp', 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',} } }); console.log("00000"); });
哪位大佬帮忙看看,有没有错误,这段代码可以在console中打印出33333,说明这之前的部分没有问题,主要是myListView这一部分有问题。
PS:我的环境是odoo12 社区版
-
-
@ssun 这个js里面的有些属性在odoo11里面就已经不适用了,明显的:
var myListView = require('web.ListView'); var tree_model = this.dataset.model;
下面是我测试odoo11,odoo12都可以使用的,你对照看看:
odoo.define('xxx.add_tree_view_button', function (require) { "use strict"; var show_button_model = ['product.template'];//哪些模型显示导入按钮 var ListController = require('web.ListController'); ListController.include({ renderButtons: function ($node) { var $buttons = this._super.apply(this, arguments); var tree_model = this.modelName; for(var i=0; i<show_button_model.length; i++) { if (tree_model == show_button_model[i]){ var button2 = $("<button type='button' class='btn btn-sm btn-default'>Import Excel</button>") .click(this.proxy('popup_import_wizard')); this.$buttons.append(button2); } } return $buttons; }, popup_import_wizard: function () { this.do_action({ type: 'ir.actions.act_window', res_model: 'import.wizard', views: [[false, 'form']], view_mode: "form", view_type: 'form', view_id: 'import_wizard_form', target: 'new', }); }, }); });
-
@seasid 你可以通过t-if来设定button在哪个模型的tree视图上显示,我的代码是这样的
<button t-if="widget.modelName == 'dwapp'" class="appbutton o_my_list_button_app" type="button"><a>应用</a></button>
通过t-if来选择模型,具体的你可以参考下https://supportuae.wordpress.com/2017/09/06/how-to-add-button-in-tree-view-header-near-create-and-import-buttons-odoo10/ 这篇文档,只看他第二点模板继承那块就行了
-
@ssun
按你说的我测试了下,
首先添加:static/src/xml/xx.xml:<?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>
其次:在__manifest__.py添加
'qweb': ['static/src/xml/*.xml',],
测试没有效果,还需要其他操作?
还有这个t-if中的widget可以这样用,有没有有文档详细说明的?