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

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

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

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

[分享]view xml 中的 button 调用web客户端事件



  • 最近写一个模块 需要 在客户端干点事.
    按常规的方法, 应该是写个 客户端模块. 在 客户端 init, start, render 去渲染个按钮出来干事.暂时还不太理解WEB模块如何很好地同服务器端通讯.

    所以, 还是使用传统的OE server 模块来干这事.
    OE 提供 ir.actions.client (客户端事件) 来让服务端与 客户端进行事件交互.

    所以, 只需要在 view xml 中. 添加个 button 并调用服务端事件, 然后 服务端返回一个 ir.actions.client 事件给客户端即可. 不知道哪位大大有更好的办法

    [code]
    ....
            <button name="act_start" type="object" string="Start"/>
    ....
    [/code]

    然后 在对象中定义该对象 act_start  方法

    [code]
    ....
        def act_start(self, cr, uid, ids, context=None):
            ret = {
                'type': 'ir.actions.client',
                'tag': 'my_sample.bt_start',
            }
            return ret
    ....
    [/code]

    然后 在 模块JS文件中, 去定义JS部分的对象
    [code]
    ....
    openerp.my_sample = function (instance) {
        instance.web.client_actions.add('my_sample.bt_start', 'instance.my_sample .btn_start');
        instance.my_sample.btn_start = function(parent, action){
            var self = this;
            alert('test');
            // and do something...
            return false;
        };
    };
    ....
    [/code]

    这时候. 不出异常. 点击 按钮即可调用 btn_start 方法了...



  • 最近写一个模块 需要 在客户端干点事.
    按常规的方法, 应该是写个 客户端模块. 在 客户端 init, start, render 去渲染个按钮出来干事.暂时还不太理解WEB模块如何很好地同服务器端通讯.

    所以, 还是使用传统的OE server 模块来干这事.
    OE 提供 ir.actions.client (客户端事件) 来让服务端与 客户端进行事件交互.

    所以, 只需要在 view xml 中. 添加个 button 并调用服务端事件, 然后 服务端返回一个 ir.actions.client 事件给客户端即可. 不知道哪位大大有更好的办法

    [code]
    ....
            <button name="act_start" type="object" string="Start"/>
    ....
    [/code]

    然后 在对象中定义该对象 act_start  方法

    [code]
    ....
        def act_start(self, cr, uid, ids, context=None):
            ret = {
                'type': 'ir.actions.client',
                'tag': 'my_sample.bt_start',
            }
            return ret
    ....
    [/code]

    然后 在 模块JS文件中, 去定义JS部分的对象
    [code]
    ....
    openerp.my_sample = function (instance) {
        instance.web.client_actions.add('my_sample.bt_start', 'instance.my_sample .btn_start');
        instance.my_sample.btn_start = function(parent, action){
            var self = this;
            alert('test');
            // and do something...
            return false;
        };
    };
    ....
    [/code]

    这时候. 不出异常. 点击 按钮即可调用 btn_start 方法了...



  • 我也在关注  tag的作用,oe在这部分完全没介绍啊



  • [quote author=l315276651 link=topic=14690.msg28138#msg28138 date=1401933677]
    目前我也遇到了这样的问题 ,
    我是通过 添加 html的input标签
    然后用js调用Python方法,
    但感觉很怪 ,你这样的方式 不错 ,只是有一个问题,
    怎么传递参数呢 如 ids
    [/quote]

    目前我也遇到了这样的问题 ,
    我是通过 添加 html的input标签
    然后用js调用Python方法,
    但感觉很怪 ,你这样的方式 不错 ,只是有一个问题,
    怎么传递参数呢 如 ids

    =============================================
    传递参数已经解决,代码如下
    [code]instance.my_sample.btn_start = function(parent, action){
            var self = this;
            //id
            action.context.active_id
            //ids
            action.context.active_ids
            //_name
            action.context.active_model
            // 更多参数 请查看相关文档 或 用js调试 自行发掘
            alert('test');
            // and do something...
            return false;
        };[/code]
    =============================================
    自定义参数 传递方式 :
    [code]
    def act_start(self, cr, uid, ids, context=None):
            context={}
            context["key"]="value"
                   
            ret = {
                'type': 'ir.actions.client',
                'tag': 'lcd_video.btnPerview',
                'context':context,
            }
            return ret
    [/code]



  • 赞.................



  • 我是在wizard执行的最后一步来执行client action的。
    client action return false, wizard不会关闭的。

    可以
    [code]
    return {'type': 'ir.actions.act_window_close'};
    [/code]
    problem solved.


登录后回复
 

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