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

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

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

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

更改form view中Label的颜色



  • 昨天看见有人在群里问有没有类似的功能,然后就试着找了一下有没有现成的模块,结果找到论坛的这个模块:
    [url=http://shine-it.net/index.php/topic,4603.msg12769.html#msg12769]http://shine-it.net/index.php/topic,4603.msg12769.html#msg12769[/url]
    下载下来安装,发现不能用 :'( :'( :'(
    不知道是不是这个模块是针对6.0或之前的版本的,反正在我7.0的上面没跑通.

    但是考虑到以后可能真有这个需求,决定在这个模块的基础上改一个自己出来.(对于不擅长前端的人来说,调试的过程无比痛苦,好在我有个搞前端的胖子同事,关键问题上帮了我不少 8))

    总结一下这个过程中碰到的问题:
    1.在feild中新增一个自定义属性用来标示label应该采用哪种颜色的问题.
    这个问题在web_field_style这个模块中已经提示了,找到addons/base/rng/view.rng文件,在第545行添加一行
    [code]<rng:optional><rng:attribute name="color"/></rng:optional>[/code]
    意思是让openerp认识field中的color这个属性.
    [img]http://images.cnitblog.com/i/396990/201407/261851209165344.png[/img]

    2.认识了color这个属性,接下来就是如何获取label这个对象,并给他设置自定义的css样式了.
    这里以常用的many2one类型的field为例,其他类型的类似地拓展:
    [code]
    instance.web.form.FieldMany2One.include({
                    display_string:function(str){
                            this._super(str);
                            if(this.node.attrs.color){
                                    this.$label.css('color',this.node.attrs.color);
                            }
                    }
            });
    [/code]

    这地方我一开始放到了web_field_style模块类似的init()方法里,结果能够获取到this.$el却死活获取不到this.$label,后来经同事提示说init()里的方法还没有加载完DOM,后来才移到了display_string这个方法里面的.

    至此,你就能很愉快的设置你many2one类型field的label的颜色了,只要在field中加一个color的属性就可以啦.
    [code]<feild name="partner" color="green">[/code]

    有图有真相:
    [img]http://images.cnitblog.com/i/396990/201407/261859596825057.png[/img]

    其他类型的feild思路类似,这个就当作个demo吧.

    -----------------------------------------我是比上面更好的一种方法的分割线---------------------------------------

    经Jeff提醒,找到一种更好的方法,把对color的定义放到options属性里,这样就免去了更新rng文件的麻烦,这样模块就可以直接安装使用了.

    [code]
    instance.web.form.FieldMany2One.include({
                    display_string:function(str){
                            this._super(str);
                            if(this.options.color){
                                    this.$label.css('color',this.options.color);
                            }
                    }
            });
    [/code]

    当然xml文件里的代码也要改了:
    [code]<feild name="partner" options="{'color':'green'}">[/code]

    地址:[url=https://github.com/kevin8909/web_label_color]https://github.com/kevin8909/web_label_color[/url]



  • 昨天看见有人在群里问有没有类似的功能,然后就试着找了一下有没有现成的模块,结果找到论坛的这个模块:
    [url=http://shine-it.net/index.php/topic,4603.msg12769.html#msg12769]http://shine-it.net/index.php/topic,4603.msg12769.html#msg12769[/url]
    下载下来安装,发现不能用 :'( :'( :'(
    不知道是不是这个模块是针对6.0或之前的版本的,反正在我7.0的上面没跑通.

    但是考虑到以后可能真有这个需求,决定在这个模块的基础上改一个自己出来.(对于不擅长前端的人来说,调试的过程无比痛苦,好在我有个搞前端的胖子同事,关键问题上帮了我不少 8))

    总结一下这个过程中碰到的问题:
    1.在feild中新增一个自定义属性用来标示label应该采用哪种颜色的问题.
    这个问题在web_field_style这个模块中已经提示了,找到addons/base/rng/view.rng文件,在第545行添加一行
    [code]<rng:optional><rng:attribute name="color"/></rng:optional>[/code]
    意思是让openerp认识field中的color这个属性.
    [img]http://images.cnitblog.com/i/396990/201407/261851209165344.png[/img]

    2.认识了color这个属性,接下来就是如何获取label这个对象,并给他设置自定义的css样式了.
    这里以常用的many2one类型的field为例,其他类型的类似地拓展:
    [code]
    instance.web.form.FieldMany2One.include({
                    display_string:function(str){
                            this._super(str);
                            if(this.node.attrs.color){
                                    this.$label.css('color',this.node.attrs.color);
                            }
                    }
            });
    [/code]

    这地方我一开始放到了web_field_style模块类似的init()方法里,结果能够获取到this.$el却死活获取不到this.$label,后来经同事提示说init()里的方法还没有加载完DOM,后来才移到了display_string这个方法里面的.

    至此,你就能很愉快的设置你many2one类型field的label的颜色了,只要在field中加一个color的属性就可以啦.
    [code]<feild name="partner" color="green">[/code]

    有图有真相:
    [img]http://images.cnitblog.com/i/396990/201407/261859596825057.png[/img]

    其他类型的feild思路类似,这个就当作个demo吧.

    -----------------------------------------我是比上面更好的一种方法的分割线---------------------------------------

    经Jeff提醒,找到一种更好的方法,把对color的定义放到options属性里,这样就免去了更新rng文件的麻烦,这样模块就可以直接安装使用了.

    [code]
    instance.web.form.FieldMany2One.include({
                    display_string:function(str){
                            this._super(str);
                            if(this.options.color){
                                    this.$label.css('color',this.options.color);
                            }
                    }
            });
    [/code]

    当然xml文件里的代码也要改了:
    [code]<feild name="partner" options="{'color':'green'}">[/code]

    地址:[url=https://github.com/kevin8909/web_label_color]https://github.com/kevin8909/web_label_color[/url]



  • 赞,kevin 最近作品不少  :)



  • [quote author=卓忆 link=topic=16521.msg28590#msg28590 date=1406380024]
    赞,kevin 最近作品不少  :)
    [/quote]
    :o :o :o闲着没事搞着玩啊,哈哈



  • rng里加属性,就是说直接装这个模块还不能用。
    不知道能否改成放到 options 属性里呢?



  • [quote author=Jeff link=topic=16521.msg28593#msg28593 date=1406386723]
    rng里加属性,就是说直接装这个模块还不能用。
    不知道能否改成放到 options 属性里呢?
    [/quote]

    多谢Jeff提醒,我刚试了一下,放到options可行,而且这样更好,这样就不用修改rng文件了. :)



  • 谢谢了,
    这下能愉快地 设置 label 颜色了


    还是一个 很好的 学习教程



  • 赞... 很愉快............



  • 能问问,instance.web.form.FieldMany2One.include,这最后的这个include是什么意思,重写,还是继承



  • include 可继承可重写,和odoo中python  class中的方法一样 只要在同一个对象里 同名的方法就会重写 .要继承加上 this._super.apply(this, arguments);



  • 请问如果只是需要改field text的颜色而非label呢? 该如何做呢?


登录后回复
 

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