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