Javascript 同时

Javascript Odoo

我正在尝试学习 odoo 的 javascript,众所周知,关于它的文档很少 首先,我终于可以用它的客户端操作创建一个视图模板,添加一个按钮来从 js 执行代码 JS :

odoo.define('js_client_view.ClientReportWidget', function (require) {
'use strict';

    console.log("module loaded");

    var AbstractAction = require('web.AbstractAction');
    var Widget = require('web.Widget');
    var core = require('web.core');
    require('web.dom_ready');
    var ajax = require('web.ajax');

    var button = $('#mybutton');


    var JsClientView = Widget.extend({
        //contentTemplate: 'UploadDocumentMainMenu',
        template: 'JsClientView',

        events: {
            'click .mybutton': '_onButton',
    
        },

        init: function(){
            this._super.apply(this, arguments);
            data =ajax.jsonRpc('/get_clients', 'call', {}).then(function(data) {
                console.log("in data")
                console.log(data)
                return data
            });
            console.log(data)
        },
        _onButton: function(event) {
            console.log("in On Button");
            console.log(event);
            ajax.jsonRpc('/get_clients', 'call', {}).then(function(data) {
                console.log("in data")
                console.log(data)
            });
        },


    });

    core.action_registry.add('js_client_view', JsClientView);
    return JsClientView;

});

我的模板:

<templates xml:space="preserve" >
    <t t-name="JsClientView" >
                    <div class="container o_mrp_bom_report_page">
            <span class="o_report_heading text-left">
                <br/>
                <button type="button" class= "btn btn-secondary mybutton" 
                >Test </button>

                <h1>Relevé de compte client</h1>
                <strong>
                    <t >
                        <span>Tous les client</span>
                    </t>
                  
                </strong>
            </span>
        
    </t>

</templates>

以及 return 按钮功能信息的控制器:

class OdooControllers(http.Controller):
    @http.route(['/get_clients'], type='json',auth='public', website=True)
    def get_clients(self, **kw):
        clients = http.request.env['hr.employee'].sudo().search([('department_id', '=',5)], limit=6)
        c = []
        for client in clients:
            n = {
                'name': client.name,
                'id': client.id,
                'certificate': client.certificate,

            }
            c.append(n)
        return c

现在我想将此信息发送到模板并显示它 我该怎么做!

Odoo JS 是odoo的前端。因此,您不能编辑模板本身,因为您不在后端。 Odoo 使用经典的 客户端-服务器架构 因此,您的 JS 与服务器是分离的。

但是您可以通过访问正常的 jqueryJS 功能来编辑整个 DOM 树。你可以这样做:

在某处添加占位符div

<div id ="content">
</div>

用数据填充div

// On click find that div and inject content into it
ajax.jsonRpc('/get_clients', 'call', {}).then(function(data) {
    $("#content").html("<p>Hello World<p/>");
    // Later fill the content with data
});

您的示例可能根本不使用 JS,但据我了解,您的目标是专门使用 JS 来显示该数据以供练习。这就是使用 JS.

将数据从服务器注入 DOM 的方式