JavaScript没有被解雇! ODOO

时间:2015-09-16 16:30:15

标签: javascript openerp odoo

我已经创建了一个用于测试我的.js函数的基本模块,但我不知道为什么它不会被触发?这是我的模块的架构:

a_js
 |static
     |src
        |js
          a_js.js
 |view
   |a_js_view.xml
   |call.xml
 |__init__.py
 |__openerp__.py
 |a_js.py

这是我的档案:

a_js/__init__.py

import a_js

这是我的a_js/__openerp__.py

#a_js/__openerp__.py
# -*- coding: utf-8 -*-
{
'name': 'Pruebas JS',
    'version': '0.1',
    'website' : '',
    'category': '',
    'summary': '',
    'description': """ - """,
    'author': 'JS',
    'depends': [
    'base',
    'web',
    ],
    'data': [
    "view/a_js_view.xml",
    "view/call.xml",
    ],
        'demo': [
    ],
    'test': [
    ],
    'installable': True,
    'auto_install': False,
}

我的a_js/a_js.py

# -*- coding: utf-8 -*-
from openerp import models,fields,api
class a_js(models.Model):    
    _name="a.js"
    numeros = fields.Integer('Números')
    letras = fields.Char('Letras')
    tiempo = fields.Date('Fecha')

我的a_js/view/a_js_view.xml

<?xml version="1.0" encoding="utf-8"?>
<openerp>
    <data>
        <menuitem name="JS" id="js_root_menu"/>
        <menuitem name="JS" parent="js_root_menu" id="js_menu"/>
        <record id="a_js_form" model="ir.ui.view">
            <field name="name">a.js.form</field>
            <field name="model">a.js</field>
            <field name="arch" type="xml">
                <form string="Invoice">
                    <header>
                    </header>
                    <sheet string="Datos">
                        <label string="Datos de Prueba" />
                        <field name="numeros" class="id_num"/>
                        <field name="letras"/>
                        <field name="tiempo"/>
                    </sheet>
                </form>
            </field>
         </record>

        <record id="a_js_action" model="ir.actions.act_window">         
            <field name="res_model">a.js</field>
            <field name="view_type">form</field>
            <field name="name">JS</field>
            <field name="view_mode">tree,form</field>
        </record>
        <menuitem name="JS" parent="js_menu"  action="a_js_action" id="a_js_menu"/>
    </data>
</openerp>

这是我的a_js/view/call.xml

<?xml version="1.0" encoding="utf-8"?>
<openerp>
    <data>
        <template id="assets_backend" name="a_js assets" inherit_id="web.assets_backend">
            <xpath expr="." position="inside">
                <script type="text/javascript" src="/a_js/static/src/js/a_js.js"></script>
            </xpath>
        </template>
    </data>
</openerp>

这是我的a_js/static/src/js/a_js.js文件:

openerp.a_js = function(instance) {
var QWeb = openerp.web.qweb;
    _t = instance.web._t;
instance.web.FormView.include({
    on_loaded: function(data) {
        var self = this;
        $('.id_num').keypress(function isNumber(evt) {
            evt = (evt) ? evt : window.event;
            var charCode = (evt.which) ? evt.which : evt.keyCode;
            if (charCode > 31 && (charCode < 48 || charCode > 57)) {
                return false;
            }
            return true;
        });
        return self._super(data);
    },
});
};

我想只允许在numeros字段中输入数字,为什么我的js函数没有被触发?请分享一些关于如何做到这一点的例子或指南!

1 个答案:

答案 0 :(得分:1)

您的脚本将添加到资源的顶部,

<xpath expr="." position="inside"> 

因此,当您这样做时,请确保已在脚本之前加载view_form.js。

我认为你需要做

<xpath expr="//script[@src='/web/static/src/js/view_tree.js']" position="after">
     <script type="text/javascript" src="your script file path"></script>
</xpath>

另一件事先通过提醒警报功能检查你的脚本是否会被加载,如果已加载,则将警报置于函数内是否正在调用。