【问题标题】:Override a JS function in Odoo 12在 Odoo 12 中覆盖 JS 函数
【发布时间】:2020-09-23 11:01:01
【问题描述】:

我正在使用 Odoo V12,我需要覆盖 JS 文件中定义的函数并在该函数中注入一些代码以更改变量值。

我需要重写的函数是这个:

odoo.define('portal.signature_form', function (require){
    "use strict";

    require('web_editor.ready');

    var ajax = require('web.ajax');
    var base = require('web_editor.base');
    var core = require('web.core');
    var Widget = require("web.Widget");
    var rpc = require("web.rpc");

    var qweb = core.qweb;

    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',
        },
    // some defined events
        submitSign: function (ev) {
            ev.preventDefault();
            // some code
            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,
                },
            }).then(function (data) {
            // mode code

目的是获取一个自定义值,并将其替换为“路由”变量。

我已经定义了我自己的 JS 文件,首先将这个文件链接到一个 XML 模板中,然后编写我的代码,但是我无法修改之前注释的变量。

有什么建议吗?

【问题讨论】:

    标签: javascript inheritance overriding odoo odoo-12


    【解决方案1】:

    您需要做的是修补现有的SignatureForm 小部件,而不是像extend 函数那样继承新的小部件。 Odoo 提供了修补现有 JS 类的方法,include 函数,official documentation 中的更多详细信息。

    您在这里弄错的另一件事是,route 不是变量,而是提供给rpc.query 函数的对象的property,要更改它,您必须修补submitSign功能。你可以按照这个:

    signature_form.SignatureForm.include({
      submitSign: function (ev) {
                ev.preventDefault();
                // some code
                return rpc.query({
                    route: "your value",          <------------------
                    params: {
                        'res_id': this.options.resId,
                        'access_token': this.options.accessToken,
                        'partner_name': partner_name,
                        'signature': signature ? signature[1] : false,
                    },
                }).then(function (data) {
                // mode code
    })
    

    假设SignatureForm 在主文件末尾的对象内返回。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多