2017-07-31 60 views
3

我已经修改odoo网站的js函数。代码如下所示 -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; 
     } 
    }); 
}); 

这将修改网站菜单编辑器。在哪里可以编辑放置四个级别的子菜单。但是这在consloe上引发了一个错误。

它说:“故障模块”,而加载它。并在控制台上一些调试后我发现了以下错误:

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文件在资产增加。

回答

2

EditMenuDialog是不确定的,因为/网站/静态/ src目录/ JS/website.contentMenu.js其中定义website.contentMenu只返回TopBar

return { 
    'TopBar': TopBarContent, 
}; 

您可以添加EditMenuDialog它:

return { 
    'TopBar': TopBarContent, 
    'EditMenuDialog': EditMenuDialog, 
}; 
+0

'include'属性未定义而不是EditMenuDialog。在EditMenuDialog中,我调用super并返回'r'。我认为我不需要按照你所展示的方式回归。 –

+0

@卢卡斯是对的。请参阅更新的版本https://github.com/odoo/odoo/blob/10.0/addons/website/static/src/js/website.contentMenu.js – manuthalasseril

+0

VAR contentMenu =需要( 'website.contentMenu'); contentMenu.EditMenuDialog。include({start:function(){}}); – manuthalasseril

0

你的代码有缺陷,拨打这个电话:

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

按照odoo模块管理,需要将给出一个实例,然后就可以延长器/包括尝试:

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

如果EditMenuDialog是一个模块。

您可以查看我们的例子中here

同样在odoo源代码,你可以查看更多的例子具有相同hacks

examples

+0

变种EditMenuDialog =要求( 'website.contentMenu.EditMenuDialog');这会抛出依赖的错误。 我已经看着odoo代码试图解决方案。我还发现了一件有趣的事情 - 如果您在odoo 10最新代码中运行代码,则不会看到该错误。如果您使用2016 odoo 10代码运行代码,则会在控制台中看到失败的模块错误。 我也使用该VAR EditMenuDialog =要求(“website.contentMenu”)尝试和后延伸的,但结果是相同的。 –

0

您应该使用扩展,而不是包括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; 
}); 
+0

这是一样的。在扩展的情况下,它给出了这个错误 - TypeError:无法读取未定义的属性'extend' –

+0

@Tanzil Khan您需要在包含JavaScript文件路径的XML文件中进行更改,其中包含“inherite_id - > website.assets_editor”而不是assets_backend 。 –

+0

我已经做到了。但这不是问题。我发现它是一个odoo错误。 –

相关问题