Uncaught ReferenceError: openerp не определен

Я создал шаблон сайта в 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>

И содержимое файла main.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

Мне нужно получить доступ к моделям и методам ODOO из файла main.js. Как я могу решить указанную выше ошибку или каким-либо образом я могу получить доступ к моделям и методам, определенным в классах ODOO, из файла javascript?

Эта ошибка отсутствует в базовых модулях (например, website_sale) в ODOO, а ошибка возникает только в новых модулях, которые я создал.


person Gopakumar N G    schedule 01.06.2016    source источник


Ответы (2)


внутри $(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;
}
person Prakash Kumar    schedule 01.06.2016
comment
так как я могу получить доступ к пользовательской модели, используя это? - person Gopakumar N G; 01.06.2016
comment
instance такой же, как openerp (экземпляр/объект openerp), поэтому вы можете вызвать new instance.web.Model('res.users') - person Prakash Kumar; 01.06.2016

Вам необходимо прочитать этот документ https://www.odoo.com/documentation/8.0/reference/javascript.html и обратите внимание на "Виджет подклассов". Это пример модуля в Odoo. Вы должны запрограммировать что-то вроде этого примера.

person Fernando    schedule 01.06.2016