覆盖JavaScript函数会引发错误“某些模块无法启动”和“未定义网络”

时间:2019-08-27 11:08:22

标签: javascript odoo odoo-12

我正在尝试使用自定义模块覆盖某些javascript函数,但无法正常工作,并在浏览器控制台内引发错误:

error: Some modules could not be started

Failed modules:
"custom_theme.custom_table_rows"

Debug:
"custom_theme.custom_table_rows":
error: ReferenceError: "web is not defined"

我有这个js文件odoo\addons\custom_theme\static\src\js\views\list\list_renderer.js,它是从源代码中复制粘贴的(rows.length从4更改为1):

odoo.define('custom_theme.custom_table_rows', function (require){
    "use strict";

    //require the module to modify:
    var ListRenderer = require(web.ListRenderer);

    //override the method:
    ListRenderer.include({
        _renderBody: function () {
            var $rows = this._renderRows();
            while ($rows.length < 1) {
                $rows.push(this._renderEmptyRow());
            }
            return $('<tbody>').append($rows);
        }
      });
  });

我在odoo\addons\custom_theme\views\header.xml里面叫它:

<?xml version="1.0" encoding="utf-8"?>
<odoo>
    <data>
    <template id="assets_backend" name="Custom_header_theme" inherit_id="web.assets_backend">
        <xpath expr=".">
                <link rel="stylesheet" href="/custom_theme/static/src/scss/style.scss"/>
                <script type="text/javascript" src="/custom_theme/static/src/js/views/list/list_renderer.js"/>
                <!-- <script type="text/javascript" src="/custom_theme/static/src/js/chrome/abstract_web_client.js"/> -->
            </xpath>
    </template>
    </data>
</odoo>

header.xmlweb也在清单中被称为:

'depends': ['base','web'],

'data': [
        # 'security/ir.model.access.csv',
        'views/views.xml',
        'views/templates.xml',
        'views/header.xml',
    ],

它什么都不做,只会抛出一个错误。

当我改为直接在源代码(odoo/addons/web/static/src/js/views/list/list_renderer.js)内部修改js文件时,该文件正在工作并且已应用更改(出现的行较少)。

我的整个模块之所以能够正常工作,是因为它在style.scss内部(也称为header.xml内部)应用了自定义主题。在修改web模块时,我只能使自定义JavaScript起作用(以及具有不同的功能)。

怎么了?为什么说web没有定义?

1 个答案:

答案 0 :(得分:1)

要求接受要用作name的{​​{1}}中的module

string

这就是为什么您得到未定义的 var ListRenderer = require('web.ListRenderer'); 变量的原因,因为没有web变量,并且您试图从中获取web属性,至少这是您的浏览器认为您正在做的事情