Openerp使用客户端验证生成QR码

时间:2014-10-13 10:49:32

标签: jquery openerp openerp-7 odoo openerp-8

我想基于字段卷号生成QR码,并将其显示在id为#34; vyas_qrcode"的id的div容器中。使用javascript文件(客户端验证)。

  1. QR码生成的逻辑位于start:function()里面的js文件(qrcode_js.js)里面,这个。$ el.append()。在chromes控制台内输入时,append中的代码有效,但在此文件中显示错误,说'<'意外。

  2. 我尝试将此逻辑直接放在xml中,但它甚至在加载页面和dom之前加载,因此生成qrcode但值为空。

  3. 我知道我应该把它放在" start:function()"它指的是正在加载的页面和DOM,但我不确定如何从那里开始。

  4. 我还想知道如何验证字段" name"并使其具有5到10个字符,并且它不应包含符号。我不想从python文件中做到这一点,而是从客户端,在" init:function()"或者" start:function()" 。

  5. 感谢大家花了宝贵的时间帮助我。

  6. 我创建的3个文件是

    from osv import osv,fields
    
        class qrcode_clientside(osv.osv):
    
            _name = 'qrcode.clientside' # Name of the table.
    
            _columns = {
    
            'name': fields.char("Name", size=64, requried=True),    # Name of the person. The name should be between 5 and 10 characters and must not contain symbols . How to do this with the javascript file(qrcode_js.js)
            'roll_number': fields.integer("Roll Number", required=True),    # Roll number of the person.
            }
    

    然后是xml文件qrcode_js.xml

        <?xml version="1.0" encoding="utf-8" ?>
    <openerp>
        <data>
    
            <record model="ir.actions.act_window" id="action_qrcode_clientside">
                <field name="name">QRCode Generation</field>
                <field name="res_model">qrcode.clientside</field>
                <field name="view_type">form</field>
                <field name="view_mode">tree,form</field>
            </record>
    
            <menuitem name="QR Code JS" id="qrcode_js_menu" sequence="10" />
            <menuitem name="QR Code Side Menu" id="qrcode_js_sidemenu" parent="qrcode_js_menu" sequence="3" />
            <menuitem name="QR Code Generator" id="qrcode_js_finalmenu" parent="qrcode_js_sidemenu" sequence="4" action="action_qrcode_clientside" />
    
            <record model="ir.ui.view" id="view_qrcode_clientside_form" >
                <field name="name">qrcode.clientside Form View</field>
                <field name="model">qrcode.clientside</field>
                <field name="arch" type="xml">
                    <form string="QRCode Clientside Generation" version="7.0">
                        <sheet>
                            <group>
                                <group>
                                    <field name="name" /> <!-- The name should be between 5 and 10 characters and must not contain symbols . How to do this with the javascript file(qrcode_js.js).-->
                                    <field name="roll_number" class="roll_number_class" />
                                 </group>
                                 <group>
                                    <div id="vyas_qrcode" width="100" height="75" >    <!-- This is where the QR Code should be generated. It should have the value of the Roll number of the person. -->
                                            QR Code Placeholder
                                    </div>
                                </group>
                        </group>
                         </sheet>
                    </form>
                </field>
            </record>
    
    
            <record model="ir.ui.view" id="view_qrcode_clientside_tree" >
                <field name="name">qrcode.clientside Tree View</field>
                <field name="model">qrcode.clientside</field>
                <field name="arch" type="xml">
                    <field name="name" />
                    <field name="roll_number" />
                </field>
            </record>
    
    
        </data>
    </openerp>
    

    然后是Javascript文件qrcode_js.js。

    openerp.js_qrcode_vyas = function(instance){
    
    instance.js_qrcode_vyas = {};
    
    alert("Inside the main function ");
    
    instance.js_qrcode_vyas.qrcode_clientside = instance.web.Widget.extend({
    
    init: function(parent, name){
        console.log("qrcode_clientside page has been loaded.");
    },
    
    start: function(){
        this.$el.append('
            <script type="text/javascript" src="js_qrcode_vyas/static/src/js/jquery.qrcode.min.js"></script>
            <script>
                    $(document).ready(function(){
                            rollnumber_from_field = $(".roll_no_class").text();     // Getting the value of Roll Number from the roll_number field.
                            qroptions = { width: 40,height: 40, text:rollnumber_from_field  , size: 100, render:"image" }; // To pass arguments to get the QR code.
                            setTimeout(function(){$("#vyas_qrcode").qrcode(qroptions);}, 4000); // Generating the QR code and displaying it after a delay of 4 seconds.
                            });
    
            </script>
            ');
    
    },
    });
    };
    

1 个答案:

答案 0 :(得分:0)

您不需要附加javascript标记,您应该可以执行以下操作:

start: function(){
                    rollnumber_from_field = this.val();     // Getting the value of Roll Number from the roll_number field.
                    qroptions = { width: 40,height: 40, text:rollnumber_from_field  , size: 100, render:"image" }; // To pass arguments to get the QR code.
                    setTimeout(function(){$("#vyas_qrcode").qrcode(qroptions);}, 4000); // Generating the QR code and displaying it after a delay of 4 seconds.
                    });
                    ...

(我还没有测试过它)。看看其他一些小部件。或者查看教程:http://odoo-80.readthedocs.org/en/latest/howtos/web.html#widgets-basics

另外,请确保您的__openerp__.py文件中包含vyas_qrcode.js文件。