odoo后台接口如果出现错误可以简单抛出一个UserError异常给前端进行处理
但是有些时候可能只是一个通知或者警告给用户,不需要错误这么重的模态强交互,也不用影响主流程
从odoo8的addons/web/static/src/js/chrome.js源码中可以发现这个功能曾经拥有
1 2 3 4 5 6 7 8 9 |
instance.web.action_notify = function(element, action) { element.do_notify(action.params.title, action.params.text, action.params.sticky); }; instance.web.client_actions.add("action_notify", "instance.web.action_notify"); instance.web.action_warn = function(element, action) { element.do_warn(action.params.title, action.params.text, action.params.sticky); }; instance.web.client_actions.add("action_warn", "instance.web.action_warn"); |
本次以notify通知为例,其对应到odoo9之后的移植代码为:
1 2 3 4 5 6 7 8 9 10 11 |
/** * author: i@renjie.me */ var core = require('web.core'); core.action_registry.add('action_notify', function(element, action){ var params = action.params; if(params){ element.do_notify(params.title, params.text, params.sticky); } return {'type':'ir.actions.act_window_close'}; }); |
相对应后台调用统一封装方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
''' author: i@renjie.me ''' def action_notify(self, title=u'默认通知标题', text=u"默认通知内容", sticky=False): return { "type": "ir.actions.client", "tag": "action_notify", "params": { "title": title, "text": text, "sticky": sticky } } |