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

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

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

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

更改form view中Label的颜色



  • 昨天看见有人在群里问有没有类似的功能,然后就试着找了一下有没有现成的模块,结果找到论坛的这个模块:<br />[url=http://shine-it.net/index.php/topic,4603.msg12769.html#msg12769]http://shine-it.net/index.php/topic,4603.msg12769.html#msg12769[/url]<br />下载下来安装,发现不能用 :'( :'( :'(<br />不知道是不是这个模块是针对6.0或之前的版本的,反正在我7.0的上面没跑通.<br /><br />但是考虑到以后可能真有这个需求,决定在这个模块的基础上改一个自己出来.(对于不擅长前端的人来说,调试的过程无比痛苦,好在我有个搞前端的胖子同事,关键问题上帮了我不少 8))<br /><br />总结一下这个过程中碰到的问题:<br />1.在feild中新增一个自定义属性用来标示label应该采用哪种颜色的问题.<br />这个问题在web_field_style这个模块中已经提示了,找到addons/base/rng/view.rng文件,在第545行添加一行<br />[code]<rng:optional><rng:attribute name="color"/></rng:optional>[/code]<br />意思是让openerp认识field中的color这个属性.<br />[img]http://images.cnitblog.com/i/396990/201407/261851209165344.png[/img]<br /><br />2.认识了color这个属性,接下来就是如何获取label这个对象,并给他设置自定义的css样式了.<br />这里以常用的many2one类型的field为例,其他类型的类似地拓展:<br />[code]<br />instance.web.form.FieldMany2One.include({<br />                display_string:function(str){<br />                        this._super(str);<br />                        if(this.node.attrs.color){<br />                                this.$label.css('color',this.node.attrs.color);<br />                        }<br />                }<br />        });<br />[/code]<br /><br />这地方我一开始放到了web_field_style模块类似的init()方法里,结果能够获取到this.$el却死活获取不到this.$label,后来经同事提示说init()里的方法还没有加载完DOM,后来才移到了display_string这个方法里面的.<br /><br />至此,你就能很愉快的设置你many2one类型field的label的颜色了,只要在field中加一个color的属性就可以啦.<br />[code]<feild name="partner" color="green">[/code]<br /><br />有图有真相:<br />[img]http://images.cnitblog.com/i/396990/201407/261859596825057.png[/img]<br /><br />其他类型的feild思路类似,这个就当作个demo吧.<br /><br />-----------------------------------------我是比上面更好的一种方法的分割线---------------------------------------<br /><br />经Jeff提醒,找到一种更好的方法,把对color的定义放到options属性里,这样就免去了更新rng文件的麻烦,这样模块就可以直接安装使用了.<br /><br />[code]<br />instance.web.form.FieldMany2One.include({<br />                display_string:function(str){<br />                        this._super(str);<br />                        if(this.options.color){<br />                                this.$label.css('color',this.options.color);<br />                        }<br />                }<br />        });<br />[/code]<br /><br />当然xml文件里的代码也要改了:<br />[code]<feild name="partner" options="{'color':'green'}">[/code]<br /><br />地址:[url=https://github.com/kevin8909/web_label_color]https://github.com/kevin8909/web_label_color[/url]



  • 昨天看见有人在群里问有没有类似的功能,然后就试着找了一下有没有现成的模块,结果找到论坛的这个模块:<br />[url=http://shine-it.net/index.php/topic,4603.msg12769.html#msg12769]http://shine-it.net/index.php/topic,4603.msg12769.html#msg12769[/url]<br />下载下来安装,发现不能用 :'( :'( :'(<br />不知道是不是这个模块是针对6.0或之前的版本的,反正在我7.0的上面没跑通.<br /><br />但是考虑到以后可能真有这个需求,决定在这个模块的基础上改一个自己出来.(对于不擅长前端的人来说,调试的过程无比痛苦,好在我有个搞前端的胖子同事,关键问题上帮了我不少 8))<br /><br />总结一下这个过程中碰到的问题:<br />1.在feild中新增一个自定义属性用来标示label应该采用哪种颜色的问题.<br />这个问题在web_field_style这个模块中已经提示了,找到addons/base/rng/view.rng文件,在第545行添加一行<br />[code]<rng:optional><rng:attribute name="color"/></rng:optional>[/code]<br />意思是让openerp认识field中的color这个属性.<br />[img]http://images.cnitblog.com/i/396990/201407/261851209165344.png[/img]<br /><br />2.认识了color这个属性,接下来就是如何获取label这个对象,并给他设置自定义的css样式了.<br />这里以常用的many2one类型的field为例,其他类型的类似地拓展:<br />[code]<br />instance.web.form.FieldMany2One.include({<br />                display_string:function(str){<br />                        this._super(str);<br />                        if(this.node.attrs.color){<br />                                this.$label.css('color',this.node.attrs.color);<br />                        }<br />                }<br />        });<br />[/code]<br /><br />这地方我一开始放到了web_field_style模块类似的init()方法里,结果能够获取到this.$el却死活获取不到this.$label,后来经同事提示说init()里的方法还没有加载完DOM,后来才移到了display_string这个方法里面的.<br /><br />至此,你就能很愉快的设置你many2one类型field的label的颜色了,只要在field中加一个color的属性就可以啦.<br />[code]<feild name="partner" color="green">[/code]<br /><br />有图有真相:<br />[img]http://images.cnitblog.com/i/396990/201407/261859596825057.png[/img]<br /><br />其他类型的feild思路类似,这个就当作个demo吧.<br /><br />-----------------------------------------我是比上面更好的一种方法的分割线---------------------------------------<br /><br />经Jeff提醒,找到一种更好的方法,把对color的定义放到options属性里,这样就免去了更新rng文件的麻烦,这样模块就可以直接安装使用了.<br /><br />[code]<br />instance.web.form.FieldMany2One.include({<br />                display_string:function(str){<br />                        this._super(str);<br />                        if(this.options.color){<br />                                this.$label.css('color',this.options.color);<br />                        }<br />                }<br />        });<br />[/code]<br /><br />当然xml文件里的代码也要改了:<br />[code]<feild name="partner" options="{'color':'green'}">[/code]<br /><br />地址:[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]<br />赞,kevin 最近作品不少  :)<br />[/quote]<br /> :o :o :o闲着没事搞着玩啊,哈哈



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



  • [quote author=Jeff link=topic=16521.msg28593#msg28593 date=1406386723]<br />rng里加属性,就是说直接装这个模块还不能用。<br />不知道能否改成放到 options 属性里呢?<br />[/quote]<br /><br />多谢Jeff提醒,我刚试了一下,放到options可行,而且这样更好,这样就不用修改rng文件了. :)



  • 谢谢了,<br />这下能愉快地 设置 label 颜色了 <br /><br /><br />还是一个 很好的 学习教程



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



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



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



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


登录后回复
 

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