我已经创建了一个用于测试我的.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函数没有被触发?请分享一些关于如何做到这一点的例子或指南!
答案 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>
另一件事先通过提醒警报功能检查你的脚本是否会被加载,如果已加载,则将警报置于函数内是否正在调用。