代码之家  ›  专栏  ›  技术社区  ›  Tanzil Khan

修改函数时出现odoo js错误,未定义属性“include”

  •  3
  • Tanzil Khan  · 技术社区  · 9 年前

    我已经修改了一个网站的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文件添加到资产中。

    3 回复  |  直到 9 年前
        1
  •  2
  •   Lucas    9 年前

    EditMenuDialog未定义,因为 /website/static/src/js/website.contentMenu.js 网站.内容菜单

    return {
        'TopBar': TopBarContent,
    };
    

    您可以向其中添加EditMenuDialog:

    return {
        'TopBar': TopBarContent,
        'EditMenuDialog': EditMenuDialog,
    };
    
        2
  •  0
  •   Cristian Salamea    9 年前

    var EditMenuDialog = require('website.contentMenu').EditMenuDialog;
    

    在odoo中的以下模块管理器中,require将提供一个实例,然后您可以扩展/包括try:

    var EditMenuDialog = require('website.contentMenu.EditMenuDialog');
    

    here

    hacks

    examples

        3
  •  0
  •   Vishal Khichadiya    9 年前

    对于EditMenuDialog,应该使用extend而不是include。

    提示:

    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;
    });
    
    推荐文章