Odoo 14 CE快速操作表单触发Cannot read properties of undefined报错
Odoo 14 CE
Cannot read properties of undefined (reading 'prop') 报错解决方案 问题复现步骤
- 进入销售模块创建销售报价单
- 新增报价单行
- 选择关联产品
- 填写产品数量
- 数量填写完成后立刻快速修改单价即可触发报错
- 所有带字段联动逻辑的表单,只要连续快速操作联动字段均可复现该问题
报错截图:
问题成因
该报错属于Odoo 14 CE前端JS框架的竞态条件漏洞,触发逻辑如下:
Odoo表单的联动字段(如产品、数量)修改后,会自动触发onchange异步请求拉取关联字段的默认值(如自动定价、税费),同时更新当前行的前端状态对象。若异步请求还未返回、状态对象未完成挂载时,用户快速操作后续字段,JS逻辑尝试读取未初始化状态对象的prop属性,就会触发undefined读取报错。
修复方案
临时规避方案
操作联动字段后稍作停顿(100ms-200ms),待前端自动更新完成后再填写下一个字段,即可避免触发报错。
永久修复方案
修改前端表单逻辑,增加非空兼容处理:
- 找到Odoo源码路径下的
/web/static/src/js/views/form/form_editor.js文件 - 定位到读取
prop属性的代码段,原逻辑类似:
const propValue = currentRecord.data[fieldName].prop;
- 增加非空判断,修改为兼容逻辑:
// 可选链写法,适配现代浏览器 const propValue = currentRecord.data[fieldName]?.prop ?? '默认值'; // 兼容低版本浏览器写法 const propValue = currentRecord.data[fieldName] && currentRecord.data[fieldName].prop ? currentRecord.data[fieldName].prop : '默认值';
- 保存修改后,执行web模块升级命令:
./odoo-bin -u web -c 你的配置文件路径.conf
- 重启Odoo服务,清理浏览器缓存后问题即可解决。
内容的提问来源于stack exchange,提问作者holydragon
相关产品推荐
相关产品推荐

