本文来源: https://www.cour4g3.me/blog/1/post/how-to-custom-create-edit-functionality-in-tree-form-views-2
---------------------------------------
在二开时,有时候可能会要求点击创建/编辑按钮时执行不同于原生功能的创建或编辑动作,例如打开一个向导,实现一些基本的验证或额外选项什么的。但要实现这样的功能,无法直接在XML中配置来实现,只能通过自定义JavaScript来覆盖按钮动作。下面是一个例子:
static/src/js/override_create.js
odoo.define('delivery_note.FormController', function (require) {
"use strict";
var ActionManager = require('web.ActionManager');
var FormController = require('web.FormController');
var ListController = require('web.ListController');
var core = require('web.core');
var rpc = require('web.rpc');
var _t = core._t;
ListController.include({
_onCreateRecord: function (event) {
var self = this;
if (this.modelName === 'delivery.note') {
if (event) {
event.stopPropagation();
}
var action_manager = new ActionManager(self);
action_manager.do_action({
name: _t('Create Delivery Note'),
type: 'ir.actions.act_window',
res_model: 'delivery.note.wizard',
view_mode: 'form',
view_type: 'form',
views: [[false, 'form']],
target: 'new',
context:{}
});
} else {
return this._super.apply(this, arguments);
}
},
});
FormController.include({
createRecord: function (parentID) {
var self = this;
if (this.modelName === 'delivery.note') {
var action_manager = new ActionManager(self);
action_manager.do_action({
type: 'ir.actions.act_window',
res_model: 'delivery.note.wizard',
view_mode: 'form',
view_type: 'form',
views: [[false, 'form']],
target: 'new',
context:{}
});
} else {
return this._super.apply(this, arguments);
}
},
});
});
以上代码将在 delivery.note 模型的列表或表单界面创建记录时,弹出 delivery.note.wizard 向导。