我试图用我的自定义模块覆盖一些 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.xml
和 web
也在 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/