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

标签 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.长度从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 也在 list 中被调用:

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

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

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

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

我的模块作为一个整体正在运行,因为它在 style.scss 中应用了自定义主题(在 header.xml 中也被调用)。在修改 web 模块时,我无法让自定义 javascript 工作(也有不同的功能)。

怎么了?为什么它说 web 未定义?

最佳答案

要求接受要用作字符串模块名称:

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

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

关于javascript - 覆盖 JavaScript 函数会引发错误 "Some modules could not be started"和 "web is not defined",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57673384/

相关文章:

javascript - CSS3 关键帧淡入淡出动画不适用于 IE

javascript - 如何在谷歌分析中设置多个跟踪器

javascript - stock.quant TreeView 上的 Odoo 12 创建按钮

odoo - 安装 odoo12 社区后,我收到导入错误

javascript - MongoDB - 插入两个集合,一个集合引用另一个集合作为子文档

javascript - 使用 Javascript 连接到 MongoDB

javascript - odoo 12中many2many字段标签上的点击事件

inheritance - Odoo 覆盖继承的方法

python - 如何在 Odoo 8 中包含 View

python - Odoo:“创建发票”按钮在销售订单中消失