覆盖 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.xml
和 web
在清单中调用:
'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
未定义?
需要接受要用作 string
的 module
的 name
:
var ListRenderer = require('web.ListRenderer');
这就是为什么你会得到未定义的 web
变量,因为没有 web
变量,而你正试图从中获取 ListRenderer
属性,至少这是你的浏览器认为你的正在做。
我试图用我的自定义模块覆盖一些 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.xml
和 web
在清单中调用:
'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
未定义?
需要接受要用作 string
的 module
的 name
:
var ListRenderer = require('web.ListRenderer');
这就是为什么你会得到未定义的 web
变量,因为没有 web
变量,而你正试图从中获取 ListRenderer
属性,至少这是你的浏览器认为你的正在做。