【发布时间】:2020-07-10 09:28:00
【问题描述】:
我正在尝试在创建的 JS 函数中添加代码行,但我无法在尝试继承该函数的事件中间注入。
例如,我有这个变量:var my_new_var = $(this).val().toString();
这是已经定义好的代码,我需要在参数中注入我的新变量:{} 字典:
odoo.define('portal.signature_form', function (require){
"use strict";
// vars and requires
var SignatureForm = Widget.extend({
template: 'portal.portal_signature',
events: {
'click #o_portal_sign_clear': 'clearSign',
'click .o_portal_sign_submit': 'submitSign',
'init #o_portal_sign_accept': 'initSign',
},
// init sign and clear sign events
submitSign: function (ev) {
ev.preventDefault();
var self = this;
var $confirm_btn = self.$el.find('button[type="submit"]');
var partner_name = self.$("#o_portal_sign_name").val();
var signature = self.$("#o_portal_signature").jSignature('getData', 'image');
var is_empty = signature ? this.empty_sign[1] === signature[1] : true;
this.$('#o_portal_sign_name').parent().toggleClass('o_has_error', !partner_name).find('.form-control, .custom-select').toggleClass('is-invalid', !partner_name);
this.$('#o_portal_sign_draw').toggleClass('bg-danger text-white', is_empty);
if (is_empty || ! partner_name) {
return false;
}
$confirm_btn.prepend('<i class="fa fa-spinner fa-spin"></i> ');
$confirm_btn.attr('disabled', true);
return rpc.query({
route: this.options.callUrl,
params: {
'res_id': this.options.resId,
'access_token': this.options.accessToken,
'partner_name': partner_name,
'signature': signature ? signature[1] : false,
// ****************** HERE I NEED TO ADD MY NEW LINE **************************
'my_new_var': my_new_var,
},
}).then(function (data) {
self.$('.fa-spinner').remove();
if (data.error) {
self.$('.o_portal_sign_error_msg').remove();
$confirm_btn.before(qweb.render('portal.portal_signature_error', {message: data.error}));
$confirm_btn.attr('disabled', false);
}
else if (data.success) {
$confirm_btn.remove();
var $success = qweb.render("portal.portal_signature_success", {widget: data});
self.$('#o_portal_sign_draw').parent().replaceWith($success);
}
if (data.force_refresh) {
if (data.redirect_url) {
window.location = data.redirect_url;
} else {
window.location.reload();
}
}
});
},
...
});
有人知道如何添加这个新代码行吗?
【问题讨论】:
-
通过普通继承我不认为你可以,我正在寻找类似的东西我没有找到解决方案,当我使用调试时我发现请求立即发送到服务器此时我决定完全重写该函数,幸运的是 Odoo 在 return 语句中返回了类的实例,所以我重写了该属性并且继承流程没有中断。我所做的是猴子补丁
-
所以如果我理解可以做到吗?如果只是通过覆盖所有代码并调用我的新代码?如果可能的话,我该怎么做(禁用现有代码并启用我的新代码)?感谢您的回复! @CharifDZ
标签: javascript odoo odoo-12