我修改了odoo网站的js功能。代码如下所示 -
odoo.define('website_custom_menu.menu_custom', function (require) {
'use strict';
require('website.contentMenu');
var EditMenuDialog = require('website.contentMenu').EditMenuDialog;
EditMenuDialog.include({
start: function () {
this._super();
var r = this._super.apply(this, arguments);
this.$('.oe_menu_editor').nestedSortable({
listType: 'ul',
handle: 'div',
items: 'li',
maxLevels: 4,
toleranceElement: '> div',
forcePlaceholderSize: true,
opacity: 0.6,
placeholder: 'oe_menu_placeholder',
tolerance: 'pointer',
attribute: 'data-menu-id',
expression: '()(.+)'
});
return r;
}
});
});
这会修改网站菜单编辑器。在哪里可以编辑以放置四个级别的子菜单。但是这会给妓女带来错误。
加载时说“失败的模块”。在控制台上进行一些调试后,我发现以下错误:
TypeError: Cannot read property 'include' of undefined at website.assets_editor.js:191 at process_job (web.assets_common.js:2994) at Object.process_jobs (web.assets_common.js:3000) at $.when.then.job.rejected (web.assets_common.js:2995) at web.assets_common.js:547 at fire (web.assets_common.js:541) at Object.add as done at Array. (web.assets_common.js:547) at Function.each (web.assets_common.js:370) at Object. (web.assets_common.js:547)
如何解决这个问题以及导致这种情况的原因?我见过其他模块,他们也以同样的方式完成了它。
TBN:模块将网站模块作为依赖项,并将js文件添加到资产中。
答案 0 :(得分:2)
EditMenuDialog未定义,因为 /website/static/src/js/website.contentMenu.js 定义 website.contentMenu 仅返回TopBar
return {
'TopBar': TopBarContent,
};
您可以向其添加EditMenuDialog:
return {
'TopBar': TopBarContent,
'EditMenuDialog': EditMenuDialog,
};
答案 1 :(得分:0)
您的代码有错误,请拨打电话:
var EditMenuDialog = require('website.contentMenu').EditMenuDialog;
在odoo中的模块管理器之后,require会给出一个实例然后你可以扩展/包含try:
var EditMenuDialog = require('website.contentMenu.EditMenuDialog');
如果EditMenuDialog是模块。
您可以查看我们的示例here
另外,在odoo源代码中,您可以查看具有相同hacks
的更多示例答案 2 :(得分:0)
您应该使用extend而不是Edit for EditMenuDialog。
<强>提示:强>
odoo.define('website_custom_menu.menu_custom', function (require) {
'use strict';
var widget = require('web_editor.widget');
var MyMenuDialog = require('website.contentMenu');
MyMenuDialog.EditMenuDialog.extend({
start: function () {
this._super();
var r = this._super.apply(this, arguments);
this.$('.oe_menu_editor').nestedSortable({
listType: 'ul',
handle: 'div',
items: 'li',
maxLevels: 4,
toleranceElement: '> div',
forcePlaceholderSize: true,
opacity: 0.6,
placeholder: 'oe_menu_placeholder',
tolerance: 'pointer',
attribute: 'data-menu-id',
expression: '()(.+)'
});
return r;
}
});
return MyMenuDialog;
});