T-Call Odoo 11 внутри модального не показывает вызываемый шаблон - PullRequest
0 голосов
/ 28 мая 2019

Я пытаюсь использовать виджет portal.portal_signature внутри моего модуля внешнего интерфейса. Если я добавлю приведенный ниже код в мой шаблон, все будет работать нормально:

<t t-call="portal.portal_signature">
    <t t-set="object" t-value="object"/>
    <t t-set="res_id" t-value="object.id"/>
    <t t-set="callUrl" t-value="'/add/some/path'"/>
</t>

Но если я добавлю этот код в шаблон, визуализированный с помощью контроллера JSON и показанный как модальное окно, t-call не отображает виджет подписи!

<template id="sale_worksheet_signature_modal" name="Sale Worksheet's Siganture Creation">
    <div id="modal_signature_create" class="modal fade" tabindex="-1" role="dialog">
        <div class="modal-dialog modal-lg">
            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">x</button>
                    <h4 class="modal-title" id="myModalLabel"><strong>Add new signature</strong></h4>
                </div>
                <div class="modal-body">
                    <h3>Sign Sale Worksheet</h3>
                    <hr/>
                    <!-- Call custom signature -->
                    <t t-call="website_signature.portal_signature">
                        <t t-set="object" t-value="object"/>
                        <t t-set="res_id" t-value="object.id"/>
                        <t t-set="callUrl" t-value="'/my/path/to/trigger'"/>
                    </t>
                </div>
                <div class="modal-footer">
                    <div class="pull-right">
                        <button type="button" class="btn btn-danger js_goto_sale_worksheet" data-dismiss="modal">Close</button>
                    </div>
                </div>
            </div>
        </div>
    </div>
</template>

Здесь контроллер, который отображает модальный шаблон:

@route(['/my/path/that/load/modal'],
       type='json', auth="user", methods=['POST'], website=True)
def signature_modal_create(self, **post):
    """
    JSON Controller that render the modal template for signature creation
    for client side
    :param post:
    :return: render modal sale_worksheet.sale_worksheet_signature_modal
    """
    if not post.get('sale_worksheet_id'):
        return False

    sale_worksheet = request.env['sale.worksheet']\
        .browse(post.get('sale_worksheet_id'))
    if not sale_worksheet.exists():
        return False

    values = self.get_modal_signature_render_values(sale_worksheet)
    return request.env['ir.ui.view']\
        .render_template("sale_worksheet.sale_worksheet_signature_modal", values)

Все это вызывается из виджета JavaScript, добавленного к кнопке, позволяющей пользователю добавить новую подпись:

odoo.define('sale_worksheet.sale_worksheet_signature_widget', function (require) {

require('web.dom_ready');

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

var _t = core._t;

var WorksheetSignatureWidget = Widget.extend({
    start: function () {
        var self = this;
        var res = this._super.apply(this.arguments).then(function () {
            $('.js_show_modal_signature_create')
                .off('click')
                .click(function (ev) {
                    self.openModalCreateSignature(ev);
                });
        });
        return res;
    },
    openModalCreateSignature: function (ev) {
        ev.preventDefault();
        ev.stopPropagation();
        var $button = $(ev.currentTarget).closest('#create_signature');
        $button.attr('disabled', true);
        var saleWorksheetLineId = $('input[name=sale_worksheet_id]').val();
        var post = {
            'sale_worksheet_id': Number(saleWorksheetLineId),
        };

        return ajax.jsonRpc('/my/path/that/load/modal', 'call', post).then(function (modal) {
            var $modal = $(modal);
            $modal.modal({backdrop: 'static', keyboard: false});
            $modal.insertAfter($('.signature-div')).modal();
            $modal.on('click', '.js_goto_sale_worksheet', function () {
                $modal.modal('hide');
                $button.prop('disabled', false);
            });
            $modal.on('click', '.close', function () {
                $button.prop('disabled', false);
            });
        });
    },
});
return WorksheetSignatureWidget;
});

Я делаю что-то не так, или render_template() метод не отображает внутренний t-call?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...