我在ODOO V8中创建了一个网站模板:
<template id="assets_frontend" inherit_id="website.assets_frontend" name="MyTemplate">
<xpath expr="." position="inside">
<script type="text/javascript" src="/my_module/static/src/js/main.js"></script>
</xpath>
</template>
<template id="my_template">
<script type="text/javascript" src="/my_module/static/src/js/main.js"/>
<div>
<table>
<tr>
<td>Email: <input type="text" id="email"/></td>
</tr>
<tr>
<td colspan="3">
<input type="button" value="Submit" onclick="submitEmail();"/>
</td>
</tr>
</table>
</div>
</template>
主.js文件中的内容是:
$(document).ready(function () {
"use strict";
function submitEmail() {
var self = this;
var website = openerp.website;
var Users = new openerp.website.Model('res.users');
// ...
}
})();
但是在单击模板中的提交按钮时,它会在浏览器控制台中显示以下错误。
Uncaught ReferenceError: openerp is not defined
我需要从main.js
文件中访问其中的 ODOO 模型和方法。如何解决上述错误,或者有什么方法可以从javascript文件访问ODOO类中定义的模型和方法?
此错误不在 ODOO 的基本模块(如 website_sale)中,该错误仅在我创建的新模块中。
在$(document).ready中,你无法访问openerp。
在js文件中创建一个与模块(不是模型)同名的方法,并传递两个参数实例和模块
现在在该方法中,您可以使用 openerp 的实例访问模块,如下所示:
function my_module(instance, module){
module = instance.point_of_sale;
var QWeb = instance.web.qweb;
_t = instance.web._t;
var OrderSuper = module.ProductListWidget;
}
您需要 https://www.odoo.com/documentation/8.0/reference/javascript.html 阅读本文档并注意"子类化小部件"。这是Odoo中模块的一个示例。你必须编写类似这个例子的东西。