Odoo14自定义视图类型报Cannot read property 'modelExtension' of undefined错误
问题原因
- JS代码里的严格模式声明语法错误:你写的是
"use_strict",正确语法为"use strict",错误声明会导致JS逻辑执行异常。 - 自定义的Model类
PersonalCalendarModel没有声明modelExtension属性,Odoo14的视图框架初始化自定义视图时,会强制读取Model类的该属性做参数校验,缺失就会抛出你遇到的Cannot read property 'modelExtension' of undefined报错。 - 你定义的视图config没有合并父类
AbstractView的默认配置,可能会遗漏框架要求的基础参数。
修复方案
1. 替换JS代码
修正后的JS代码如下:
odoo.define("personal_calendar_view.PersonalCalendarView", function(require){ "use strict"; var AbstractController = require("web.AbstractController"); var AbstractModel = require("web.AbstractModel"); var AbstractRenderer = require("web.AbstractRenderer"); var AbstractView = require("web.AbstractView"); var ViewRegistry = require("web.view_registry"); var PersonalCalendarController = AbstractController.extend({}); var PersonalCalendarRenderer = AbstractRenderer.extend({}); var PersonalCalendarModel = AbstractModel.extend({ modelExtension: "PersonalCalendarModel" }); var PersonalCalendarView = AbstractView.extend({ display_name: "Personal Calendar", config: _.extend({}, AbstractView.prototype.config, { Model: PersonalCalendarModel, Controller: PersonalCalendarController, Renderer: PersonalCalendarRenderer, }), view_type: "personal_calendar", }); ViewRegistry.add("personal_calendar", PersonalCalendarView); return PersonalCalendarView; });
2. 生效验证
升级自定义模块,清空浏览器缓存和Odoo服务端静态资源缓存后重新访问视图即可。如果后续出现渲染空白问题,可先给PersonalCalendarRenderer添加基础的start方法输出测试内容,确认视图链路通了之后再开发自定义渲染逻辑。
内容的提问来源于stack exchange,提问作者l_grueni
相关产品推荐
相关产品推荐

