odoo js 修改函数时出错,属性 'include' undefined
odoo js error while modifying function, property 'include' undefined
修改了一个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;
}
});
});
这修改了网站菜单编辑器。可以编辑放置四级子菜单的地方。但这会在控制台上引发错误。
加载时显示 "Failed Module"。在控制台上进行一些调试后,我发现了以下错误:
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: 该模块依赖website模块,assets中添加了js文件。
您的代码有错误,请调用:
var EditMenuDialog = require('website.contentMenu').EditMenuDialog;
在odoo中跟随模块管理器,require会给出一个实例然后你可以extende/include试试:
var EditMenuDialog = require('website.contentMenu.EditMenuDialog');
如果 EditMenuDialog 是一个模块。
您可以查看我们的示例here
同样在 odoo 源代码上,您可以检查更多具有相同 hacks
的示例
EditMenuDialog 未定义,因为 /website/static/src/js/website.contentMenu.js 定义了 website.contentMenu returns 只有顶部栏
return {
'TopBar': TopBarContent,
};
可以添加EditMenuDialog:
return {
'TopBar': TopBarContent,
'EditMenuDialog': EditMenuDialog,
};
对于 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;
});
修改了一个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;
}
});
});
这修改了网站菜单编辑器。可以编辑放置四级子菜单的地方。但这会在控制台上引发错误。
加载时显示 "Failed Module"。在控制台上进行一些调试后,我发现了以下错误:
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: 该模块依赖website模块,assets中添加了js文件。
您的代码有错误,请调用:
var EditMenuDialog = require('website.contentMenu').EditMenuDialog;
在odoo中跟随模块管理器,require会给出一个实例然后你可以extende/include试试:
var EditMenuDialog = require('website.contentMenu.EditMenuDialog');
如果 EditMenuDialog 是一个模块。
您可以查看我们的示例here
同样在 odoo 源代码上,您可以检查更多具有相同 hacks
的示例EditMenuDialog 未定义,因为 /website/static/src/js/website.contentMenu.js 定义了 website.contentMenu returns 只有顶部栏
return {
'TopBar': TopBarContent,
};
可以添加EditMenuDialog:
return {
'TopBar': TopBarContent,
'EditMenuDialog': EditMenuDialog,
};
对于 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;
});