覆盖 JavaScript 函数会引发错误 "Some modules could not be started" 和 "web is not defined"

Overriding JavaScript function throws error "Some modules could not be started" and "web is not defined"

我试图用我的自定义模块覆盖一些 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 未定义?

需要接受要用作 stringmodulename:

    var ListRenderer = require('web.ListRenderer');

这就是为什么你会得到未定义的 web 变量,因为没有 web 变量,而你正试图从中获取 ListRenderer 属性,至少这是你的浏览器认为你的正在做。