为了账号安全,请及时绑定邮箱和手机立即绑定

在 Odoo 13 中动态重新渲染模板的最佳方式

在 Odoo 13 中动态重新渲染模板的最佳方式

素胚勾勒不出你 2022-10-13 09:45:27
在 QWeb 网页(onchange元素上的事件)发生更改后,我正在尝试使用一组新数据重新渲染模板。我习惯于使用 Vue 等 JS 框架,但在更新 QWeb 网页上的值时遇到了问题。我没有在文档中看到如何做到这一点的明确解释,在搜索互联网和源代码时,我看到了许多不同的答案,大概是针对不同的 Odoo 版本。但两者都不起作用。我看到了两种主要的方法:Python控制器内部JavaScript 小部件内部在 Python 控制器中,我看到了不同的语法,我不确定何时使用什么。例如:
查看完整描述

1 回答

?
12345678_0001

TA贡献1802条经验 获得超5个赞

# First method

@http.route('/test', type='json' auth='user', website=True)

def object(self, **kw):

    return http.request.render('template.name', {

        'value': kw.get('value', 0),

    })


# Second method

@http.route('/test', type='json' auth='user', website=True)

def object(self, **kw):

    return request.env['ir.ui.view'].render_template('template.name', {

        'value': kw.get('value', 0),

    })

它们之间有什么区别吗?同样出于某种原因,它在从 JavaScript 调用它并使用type='json'. 它仅在我使用type='http'并直接从浏览器转到那里时呈现 - 我需要一个 JS 事件来导致重新呈现。


我还看到可以像这样从 JavaScript 渲染模板:


_onChange: function () {

    console.log("something changed!");


    return this._rpc({

        route: '/test',

        params: {

            value: 1,

        }

    }).then(function (data) {

        this.$el.html(QWeb.render('template.name', {

            value: data.value

        }));

    });

},

但由于某种原因,我得到了错误Template 'template.name' not found。


我在这一点上非常卡住,不知道下一步该怎么做。我可以向控制器发送数据,也可以从控制器发送数据。但我不知道如何更新 QWeb 上的变量。请帮忙。


查看完整回答
反对 回复 2022-10-13
  • 1 回答
  • 0 关注
  • 81 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信