我正在尝试使用自定义模块覆盖某些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
没有定义?
答案 0 :(得分:1)
要求接受要用作name
的{{1}}中的module
:
string
这就是为什么您得到未定义的 var ListRenderer = require('web.ListRenderer');
变量的原因,因为没有web
变量,并且您试图从中获取web
属性,至少这是您的浏览器认为您正在做的事情