odoo doAction
Posted CrossPython
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了odoo doAction相关的知识,希望对你有一定的参考价值。
setup() this.action = useService("action");
openSettings() console.log("click action"); // this.action.doAction("base_setup.action_general_configuration"); this.action.doAction( name: "帮助按钮点击事件", //自定义弹出框名称 type: \'ir.actions.act_window\', //动作类型 res_model: \'items\', //视图的model views: [ [false, \'form\'], ], view_mode: "form", view_type: \'form\', view_id: \'items_act_window\', //视图的id flags: \'initial_mode\': \'view\',action_buttons:false, //target: \'new\'弹出框默认为编辑模式,需要只读模式的可以加上这句 target: \'new\' //打开方式 ); console.log("click action over");
设计模式-策略模式简单理解
先看一段简单的代码:
class A{ public void doAction(int type){ .......//其他代码 if(type ==0){ do action0; return; } if(type ==1){ do action1; return; } if(type ==2){ do action2; return; } ... if(type ==n){ do action4; return; } .......//其他代码 } }
client: new A().doAction(0);
相信都遇到过这样的代码吧,这样会有什么问题呢?
问:如果需要增加新的行为action怎么办?
答:修改doAction方法。
问:还有没有其他办法呢?
答:可以继承A,重载其doAction方法。
问:可以,但是重载A后,如果A的其他方法发生了变化会直接影响到其子类,这样引入了新的问题。
如何做到增加一个新的Action而不影响其他的代码呢?
首先,定义一个接口:
interface Action{ do(); }
然后,定义其实现类
class Action0 implements Action{ do(){实现action0操作} } class Action1 implements Action{ do(){实现action1操作} } class Action2 implements Action{ do(){实现action2操作} } 。。。
修改调用者上下文:
class A{ Action action = null; setAction(Action action){this.action = action;} doAction(){ ... action.do(); ... } }
client:在使用A时动态设置其Action对象。 A a =new A(); a.setAction(new Action0()); //动态设置其Action对象 a.doAction();
这样,即使再增加Action的操作,只需要新增一个Action接口的实现类。而不用修改调用者A的任何代码。
这就是策略模式的使用,策略模式包含两个角色:
Context:使用策略的上下文,也就是例子中类A。
Strategy:策略类,也就是例子中的Action接口。
策略模式是非常简单的一个模式,就是把行为提取成一个接口,从而把行为和使用者解耦,行为的增加或者变化不会影响到使用者的代码。
以上是关于odoo doAction的主要内容,如果未能解决你的问题,请参考以下文章