Odoo v9 POS模块商品数量加1方法及自定义快捷键无效问题求解
解决Odoo v9 POS中Ctrl+左箭头增加商品数量的问题
嘿,我能看出你已经走对了一半——成功捕获了快捷键并拿到了目标订单行,但问题出在你只是刷新了界面,却没有实际修改订单行的数量值😉
问题根源
你当前的代码调用了rerender_orderline和update_summary,但这两个方法只是负责界面渲染和汇总更新,并没有改变订单行的实际数量。原生的orderline_change函数是在数量已经发生变化后,用来同步界面显示的,它本身不具备修改数量的功能。
修正后的代码
要实现数量加1,你需要先修改订单行的数量,再触发界面更新。这里我们用POS原生的set_quantity方法来修改数量,它会自动处理价格计算、事件触发等逻辑,比直接修改属性更可靠:
// OrderWidget screens.OrderWidget.include({ renderElement: function(){ this._super(); var self = this; // 监听Ctrl+左箭头快捷键 $.ctrl('37', function() { var currentOrder = self.pos.get_order(); if (!currentOrder) return; // 先检查是否有活跃订单 var targetLine = currentOrder.get_last_orderline(); if (!targetLine) return; // 检查是否有可修改的订单行 // 获取当前数量并加1 var currentQty = targetLine.get_quantity(); targetLine.set_quantity(currentQty + 1); // 可选:手动触发界面更新(set_quantity其实已经会自动触发,但保险起见可以加上) self.rerender_orderline(targetLine); self.update_summary(); }); }, });
关键说明
set_quantity是Odoo POS订单行对象的原生方法,调用它不仅会修改数量,还会自动重新计算该商品的总价、触发订单行变更事件,确保数据和界面的一致性。- 增加了空值检查(订单不存在、订单行不存在),避免快捷键触发时出现报错。
这样修改后,按下Ctrl+左箭头就能正确让最后一个订单行的数量加1啦!
内容的提问来源于stack exchange,提问作者Pointer




