【发布时间】:2023-02-04 04:53:04
【问题描述】:
我是一个完整的 JS n00b,我真的很难弄清楚这一点。我正在尝试更改图表中使用的默认颜色。在 web/views/graph/colors.js 中有一个“getColors”函数,它只返回一个用于此的颜色数组,对我来说最好用我自己的颜色数组覆盖这个函数,但我不能为了我的一生,想办法修补它,因为这个函数不属于一个类。
原始代码(我想修补)看起来像这样(注意这些都不在类中):
/** @odoo-module **/
const COLORS_BRIGHT = [
"#1f77b4",
// rest removed for brevity
];
const COLORS_DARK = [
"#00ffff",
// rest removed for brevity
];
// this is the function I want to replace with my own
export function getColors(colorScheme) {
return colorScheme === "dark" ? COLORS_DARK : COLORS_BRIGHT;
}
// a few more functions that I don't care about
我已经像这样创建了自己的 colors.js
/** @odoo-module **/
import { patch } from '@web/core/utils/patch';
import { getColors } from '@web/views/graph/colors';
const MY_COLORS_BRIGHT = [
"#1f77b4",
// rest removed for brevity
];
const MY_COLORS_DARK = [
"#00ffff",
// rest removed for brevity
];
patch(getColors, 'my_module.colors', {
getColors(colorScheme) {
return colorScheme === "dark" ? MY_COLORS_DARK : MY_COLORS_BRIGHT;
}
}
显然这是行不通的——它在旧的 getColors 函数中添加了一个新的 getColors 函数,而不是替换它。通常我认为我会用 getColors 函数修补类,我认为这会起作用,但在这种情况下没有要修补的类。在没有父级修补的情况下,我该如何替换这个函数?
【问题讨论】:
-
如果您创建了自己的
colors.js文件,那么不要导入getColors函数并使用您自己的。我不明白你所说的“这不是一个类”是什么意思,因为它只是模块中的一个简单函数导出。除非您修改源代码本身,否则您不能覆盖该功能(这不是模块的想法)。问题是常量MY_COLORS_BRIGHT- 这些在函数中返回,您需要更改它们的值。 -
getColors函数(或者实际上colors.js文件中的getColor函数)在 Odoo 的许多地方使用。我不能(或者更确切地说不想)继承/修补/以其他方式修改调用此函数的所有位置,而不是调用我自己的。我需要改为修补原始函数以调用不同的函数。我已经解决了这个问题 - 请参阅下面的解决方案。
标签: javascript odoo odoo-16