Odoo中文社区可以通过以下三个域名访问:shine-it.net , odoocn.org,odoo.net.cn

原论坛用户的基本信息和发帖这里都予以保留,请注意:原论坛用户无需重新注册新用户,但是您的密码需要重置

开发人员可以登录gitter讨论组: http://gitter.im/odoo-china/Talk, 需要github账号

如果您登录系统碰到问题,请在微信公众号留言:

Js初探



  • 最近准备通过js来对oe的页面做一些默认没有的效果,先研究下页面的按钮要怎么样才能调用到js方法;<br />研究的思路如下:<br />1、先要让js文件加载到页面;<br />2、初始化js的对象;<br />3、按钮的方法要能调用到js的对象的方法;这里有两种路径,一种是页面的按钮经过后台的python方法调用js方法,一种是在页面的按钮上定义onclick事件,直接调用;<br /><br />碰到的问题如下:<br />1、通过在__openerp__.py文件中定义js,是可以加载js文件的,但是发现js文件加载到页面后,并没有初始化;<br /><br />解决办法:<br />1、经过@深圳-Tommy的提醒,在js中定义的对象,必须和模块名相同;<br />2、如果要页面的按钮上添加onclick事件,需要在按钮外面包<html>标签。<br /><br />老规矩,附上代码:<br />openerp.py中的js文件引入:<br />[code]{...<br />    "installable" : True,  # 可否安装      <br />    'auto_install': False,          <br />    "category":u'保险',  # 模块类型<br />    'js': ['static/src/js/syt_insurance222.js',],<br />}[/code]<br />js类定义如下:<br />[code]openerp.syt_insurance = function(instance) {<br /> instance.web.client_actions.add('bt_start', 'instance.syt_insurance.btn_start');<br /> instance.syt_insurance.btn_start = function() {<br /> var self = this;<br /> alert('test');<br /> return false;<br /> };<br />};<br />function aaa(){<br /> alert(123);<br />}<br />[/code]<br />页面调用,通过python方法:<br />[code]<button name="call_js"  groups="base.group_erp_manager"  string="调用js方法" type="object"/>[/code]<br />页面调用,直接通过onclick:<br />[code]<html><br /> <input type="button" value="获得设备代码" onclick="aaa(this)" class="oe_button oe_form_button_save"/><br /> </html>[/code]<br />python类中定义的方法:<br />[code]def call_js(self, cr, uid, ids,context=None): <br />        context={}<br />        context["key"]="value"<br />        print "call——js..."<br />        ret = {<br />            'type': 'ir.actions.client',<br />            'tag': 'bt_start',<br />            'context': context,<br />        }<br />        return ret[/code]



  • 最近准备通过js来对oe的页面做一些默认没有的效果,先研究下页面的按钮要怎么样才能调用到js方法;<br />研究的思路如下:<br />1、先要让js文件加载到页面;<br />2、初始化js的对象;<br />3、按钮的方法要能调用到js的对象的方法;这里有两种路径,一种是页面的按钮经过后台的python方法调用js方法,一种是在页面的按钮上定义onclick事件,直接调用;<br /><br />碰到的问题如下:<br />1、通过在__openerp__.py文件中定义js,是可以加载js文件的,但是发现js文件加载到页面后,并没有初始化;<br /><br />解决办法:<br />1、经过@深圳-Tommy的提醒,在js中定义的对象,必须和模块名相同;<br />2、如果要页面的按钮上添加onclick事件,需要在按钮外面包<html>标签。<br /><br />老规矩,附上代码:<br />openerp.py中的js文件引入:<br />[code]{...<br />    "installable" : True,  # 可否安装      <br />    'auto_install': False,          <br />    "category":u'保险',  # 模块类型<br />    'js': ['static/src/js/syt_insurance222.js',],<br />}[/code]<br />js类定义如下:<br />[code]openerp.syt_insurance = function(instance) {<br /> instance.web.client_actions.add('bt_start', 'instance.syt_insurance.btn_start');<br /> instance.syt_insurance.btn_start = function() {<br /> var self = this;<br /> alert('test');<br /> return false;<br /> };<br />};<br />function aaa(){<br /> alert(123);<br />}<br />[/code]<br />页面调用,通过python方法:<br />[code]<button name="call_js"  groups="base.group_erp_manager"  string="调用js方法" type="object"/>[/code]<br />页面调用,直接通过onclick:<br />[code]<html><br /> <input type="button" value="获得设备代码" onclick="aaa(this)" class="oe_button oe_form_button_save"/><br /> </html>[/code]<br />python类中定义的方法:<br />[code]def call_js(self, cr, uid, ids,context=None): <br />        context={}<br />        context["key"]="value"<br />        print "call——js..."<br />        ret = {<br />            'type': 'ir.actions.client',<br />            'tag': 'bt_start',<br />            'context': context,<br />        }<br />        return ret[/code]





  • openerp.syt_insurance,其中的syt_insurance必须是模块名,否则,这里定义的js对象是不会初始化的。我就是在这个地方浪费了好多事件啊。。。再次感谢Tommy



  • 干货! 必须顶, 已经 “喝彩”



  • 感谢梦姑的分享,让好多新人少走了弯路,赞一个!希望后续再多多分享宝贵的经验,嘿嘿



  • 多谢阿狸的提醒,把python中的定义的方法补充了一下


  • 管理员

    谢谢lz分享,上面展示的是两种触发js的方法吧?一个是通过python代码调用ir.actions.client,另外一种是直接在代码里面插入<html></html>标签?



  • 很棒,知道原理比像我这样误打误撞效率高得多,不愧是前端老手!



  • 想搞js的初级选手,来这里https://github.com/figol/web_scanner; 大牛直接跳过。



  • 谢谢分享,<br />Mark.



  • 但是我用工作流的button的事件去调call_js方法,不行。有什么办法能解决吗?



  • [quote author=puyu link=topic=16514.msg29841#msg29841 date=1421206640]<br />但是我用工作流的button的事件去调call_js方法,不行。有什么办法能解决吗?<br />[/quote]<br /><br />这个问题基本解决了。但是如何给js传参的呢?比如把form当前记录的id传给js



  • [quote author=panyi5202 link=topic=16514.msg28524#msg28524 date=1405937743]<br />openerp.syt_insurance,其中的syt_insurance必须是模块名,否则,这里定义的js对象是不会初始化的。我就是在这个地方浪费了好多事件啊。。。再次感谢Tommy<br />[/quote]<br /><br />谢谢,不过我这里出现了一个问题,我新建了个模块,加入js,但是怎么也调不到。。,在view里写xml


登录后回复
 

与 Odoo 中文社区 的连接断开,我们正在尝试重连,请耐心等待