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

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

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

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

Js初探



  • 最近准备通过js来对oe的页面做一些默认没有的效果,先研究下页面的按钮要怎么样才能调用到js方法;
    研究的思路如下:
    1、先要让js文件加载到页面;
    2、初始化js的对象;
    3、按钮的方法要能调用到js的对象的方法;这里有两种路径,一种是页面的按钮经过后台的python方法调用js方法,一种是在页面的按钮上定义onclick事件,直接调用;

    碰到的问题如下:
    1、通过在__openerp__.py文件中定义js,是可以加载js文件的,但是发现js文件加载到页面后,并没有初始化;

    解决办法:
    1、经过@深圳-Tommy的提醒,在js中定义的对象,必须和模块名相同;
    2、如果要页面的按钮上添加onclick事件,需要在按钮外面包<html>标签。

    老规矩,附上代码:
    openerp.py中的js文件引入:
    [code]{...
        "installable" : True,  # 可否安装     
        'auto_install': False,         
        "category":u'保险',  # 模块类型
        'js': ['static/src/js/syt_insurance222.js',],
    }[/code]
    js类定义如下:
    [code]openerp.syt_insurance = function(instance) {
    instance.web.client_actions.add('bt_start', 'instance.syt_insurance.btn_start');
    instance.syt_insurance.btn_start = function() {
    var self = this;
    alert('test');
    return false;
    };
    };
    function aaa(){
    alert(123);
    }
    [/code]
    页面调用,通过python方法:
    [code]<button name="call_js"  groups="base.group_erp_manager"  string="调用js方法" type="object"/>[/code]
    页面调用,直接通过onclick:
    [code]<html>
    <input type="button" value="获得设备代码" onclick="aaa(this)" class="oe_button oe_form_button_save"/>
    </html>[/code]
    python类中定义的方法:
    [code]def call_js(self, cr, uid, ids,context=None):
            context={}
            context["key"]="value"
            print "call——js..."
            ret = {
                'type': 'ir.actions.client',
                'tag': 'bt_start',
                'context': context,
            }
            return ret[/code]



  • 最近准备通过js来对oe的页面做一些默认没有的效果,先研究下页面的按钮要怎么样才能调用到js方法;
    研究的思路如下:
    1、先要让js文件加载到页面;
    2、初始化js的对象;
    3、按钮的方法要能调用到js的对象的方法;这里有两种路径,一种是页面的按钮经过后台的python方法调用js方法,一种是在页面的按钮上定义onclick事件,直接调用;

    碰到的问题如下:
    1、通过在__openerp__.py文件中定义js,是可以加载js文件的,但是发现js文件加载到页面后,并没有初始化;

    解决办法:
    1、经过@深圳-Tommy的提醒,在js中定义的对象,必须和模块名相同;
    2、如果要页面的按钮上添加onclick事件,需要在按钮外面包<html>标签。

    老规矩,附上代码:
    openerp.py中的js文件引入:
    [code]{...
        "installable" : True,  # 可否安装     
        'auto_install': False,         
        "category":u'保险',  # 模块类型
        'js': ['static/src/js/syt_insurance222.js',],
    }[/code]
    js类定义如下:
    [code]openerp.syt_insurance = function(instance) {
    instance.web.client_actions.add('bt_start', 'instance.syt_insurance.btn_start');
    instance.syt_insurance.btn_start = function() {
    var self = this;
    alert('test');
    return false;
    };
    };
    function aaa(){
    alert(123);
    }
    [/code]
    页面调用,通过python方法:
    [code]<button name="call_js"  groups="base.group_erp_manager"  string="调用js方法" type="object"/>[/code]
    页面调用,直接通过onclick:
    [code]<html>
    <input type="button" value="获得设备代码" onclick="aaa(this)" class="oe_button oe_form_button_save"/>
    </html>[/code]
    python类中定义的方法:
    [code]def call_js(self, cr, uid, ids,context=None):
            context={}
            context["key"]="value"
            print "call——js..."
            ret = {
                'type': 'ir.actions.client',
                'tag': 'bt_start',
                'context': context,
            }
            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; 大牛直接跳过。



  • 谢谢分享,
    Mark.



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



  • [quote author=puyu link=topic=16514.msg29841#msg29841 date=1421206640]
    但是我用工作流的button的事件去调call_js方法,不行。有什么办法能解决吗?
    [/quote]

    这个问题基本解决了。但是如何给js传参的呢?比如把form当前记录的id传给js



  • [quote author=panyi5202 link=topic=16514.msg28524#msg28524 date=1405937743]
    openerp.syt_insurance,其中的syt_insurance必须是模块名,否则,这里定义的js对象是不会初始化的。我就是在这个地方浪费了好多事件啊。。。再次感谢Tommy
    [/quote]

    谢谢,不过我这里出现了一个问题,我新建了个模块,加入js,但是怎么也调不到。。,在view里写xml


登录后回复
 

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