2017-07-31 68 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錯誤。 –

相關問題