Odoo 视图继承不是“把 XML 复制一份”:XPath、position 和 primary/extension 讲透
看懂 ir.ui.view 如何把继承链拼成最终 arch,为什么 XPath 找不到、position 失效,往往不是 Odoo 随机坏了。
TOPIC PICKS
看懂 ir.ui.view 如何把继承链拼成最终 arch,为什么 XPath 找不到、position 失效,往往不是 Odoo 随机坏了。
可以顺着继续读的相邻方向
看懂 ir.ui.view 如何把继承链拼成最终 arch,为什么 XPath 找不到、position 失效,往往不是 Odoo 随机坏了。
从 ir.ui.view 的 inherit_id、mode、_compute_invalid_locators 和 _check_xml 讲清楚,为什么一个 xpath 写错会让整张视图校验失败。
Odoo 的上传反馈之所以看起来顺滑,不是因为某个上传框“更高级”,而是因为前端把三件事明确拆开了:`file_upload` service 负责传输和任务状态,`overlay` service 负责临时覆盖层生命周期,`notification` 负责轻量错误与结果反馈。本文基于 web 源码把这三层边界讲透。
很多人把 Odoo 销售里的商品配置器理解成一个前端弹窗:选属性、改数量、点确认。但从 `product_configurator_dialog.js`、`product_product.js` 和 `sale_order.py` 看,官方真正维护的是一条“组合选择 → 服务器校验 → 价格回写 → 销售行落地”的接力链。本文把这条链路讲透。
很多人以为 Odoo 的多公司切换只是“点一下菜单,然后整页刷新”。但从 `switch_company_menu.js` 和 `user.js` 看,官方真正维护的是一套前端用户上下文:cookie 记录当前公司集合,`allowed_company_ids` 驱动 RPC 上下文,`userBus` 负责广播变化,路由层再决定是局部栈回退还是整页刷新。本文把这套链路讲透。
很多人以为 Odoo 会计里上传发票附件只是“前端传一个文件,后端存成 attachment”。但从 `document_file_uploader.js` 到 `account/models/ir_attachment.py` 的实现看,官方实际拆成了三段:先把原始文件安全落成附件,再把附件批量交给业务模型识别生成单据,最后由附件后处理把会计对象和附件关系补齐。本文把这条链路讲透。