[分享]buke 分享的一个关于自定义 widget 的例子.
- 
先看看最终效果: 
 Page 页效果:
 [attachimg=1]
 编辑页效果:
 [attachimg=2]
 相关 view xml:<br />....<br />        <field name="website" position="after"><br />            <field name="qq" widget="qq"/><br />        </field><br />....<br />
 模块核心文件结构:
 openerp.py
 static/src/js/web_qq_widget.js
 static/src/xml/web_qq_widget.xml
 openerp.py 文件:<br />....<br />{<br />    'name': 'rundex',<br />    'version': '0.1',<br />    'category': 'Sales Management',<br />    'description': """<br />....<br />    'js': [<br />        'static/src/js/*.js',<br />    ],<br />    'css': [<br />    ],<br />    'qweb': [<br />        'static/src/xml/*.xml',<br />    ],<br />....<br />
 web_qq_widget.xml 文件:<br />....<br /><template><br />    <t t-name="QqWidget"><br />        <span class="oe_form_field oe_form_field_url" t-att-style="widget.node.attrs.style"><br />            <span class="oe_form_qq" t-if="widget.get('effective_readonly')"><br />                <a href="#" class="oe_form_uri" target="_blank"/><br />                <span class="qq_number"></span><br />            </span><br /><br />            <t t-if="!widget.get('effective_readonly')"><br />                <div><br />                    <input type="text" t-att-id="widget.id_for_label" t-att-tabindex="widget.node.attrs.tabindex" t-att-autofocus="widget.node.attrs.autofocus" t-att-placeholder="widget.node.attrs.placeholder" t-att-maxlength="widget.field.size" /><br />                </div><br />            </t><br />        </span><br />    </t><br /></template><br />....<br />
 web_qq_widget.js 文件:<br />....<br />openerp.rundex = function(instance){<br />    var _t = instance.web._t, _lt = instance.web._lt;<br />    var QWeb = instance.web.qweb;<br />    instance.web.form.widgets.add('qq', 'instance.rundex.QqWidget');<br />    instance.rundex.QqWidget = instance.web.form.FieldChar.extend({<br />        display_name : _lt('QqWidget'),<br />        template: "QqWidget",<br /><br />        render_value: function(){<br />            if (!this.get("effective_readonly")){<br />                this._super();<br />            }else{<br />                if (this.get('value')){<br />                    this.$el.find('a').attrs('href', 'http://wpa.qq.com/msgrd?v=3&uid=' + this.get('value') + '&site=qq&menu=yes').html('<img border="0" src="http://pub.idqqimg.com/wpa/images/counseling_style_52.png" alt="' + this.get('value') + '" title="' +this.get('value') + '"/>');<br />                    this.$el.find(".qq_number").text(this.get('value'));<br />                }else{<br />                    this.$el.find('a').attr('href', '#').html('');<br />                    this.$el.find(".qq_number").text();<br />                }<br />            }<br />        },<br />    });<br />};<br />....<br />
 注: rundex 为模块名
 模板文件中注意: t-if="widget.get('effective_readonly')" effective_readonly = true 表示编辑状态
 特此感谢 buke(广州-步科) 同学的分享.. 大家鼓掌...
- 
总监辛苦了,多谢各位捧场 ~ 
 代码整理了下,做成了2个小模块,请大家笑纳
 https://github.com/buke/openerp-custom-widget-qq
- 
谢谢 步科, 谢谢总监 


