【问题标题】:How to set JS variable value into an Odoo qweb template variable value如何将 JS 变量值设置为 Odoo qweb 模板变量值
【发布时间】:2020-07-08 08:21:03
【问题描述】:

我需要将一个JS变量值设置成一个Odoo模板变量值。

例如select_val值:

<script>
$(document).ready(function() {
 var button = $('#select_coas_report_sign');
 button.change(function() {
  select_val = $(this).val();
 });
});
</script>

我需要设置成下一个变量值:

<t t-set="my_var" t-value="select_val" />

另外,我需要将此变量设置为模板中的函数调用,但给了我服务器错误。

<t t-set="callUrl"
t-value="sale_order.get_portal_url(suffix='/accept_order/' + {{ my_var }})" />

任何的想法?感谢阅读!

【问题讨论】:

  • 您是在 javascript 中使用来自 javascript 的上下文渲染模板,还是在服务器端使用来自服务器的上下文渲染模板?
  • 我认为它是由服务器渲染的,上下文来自服务器,知道吗? @bigbear3001

标签: javascript odoo odoo-12


【解决方案1】:

您正在将多种类型的渲染 odoo 模板混合到无法工作的东西中。

您的 javascript &lt;script&gt; 标签在服务器渲染模板后执行,因此如果您重新渲染原始页面,它只能在服务器端设置变量。通常这是通过创建&lt;form&gt; 并通过&lt;input&gt; 将数据传递给控制器​​来完成的。然后控制器使用输入中的变量值呈现模板。

您看到TypeError: unhashable type: 'set' 的错误是因为:

  • 在执行&lt;t t-set="callUrl" t-value="sale_order.get_portal_url(suffix='/accept_order/' + {{ my_var }})" /&gt; 时,t-value 中的字符串作为 python 表达式运行
  • python 表达式{{ my_var }} 给你错误TypeError: unhashable type: 'set'

要修复错误,您可以将 callUrl 设置更改为:

&lt;t t-set="callUrl" t-value="sale_order.get_portal_url(suffix='/accept_order/' + my_var )" /&gt; 提示:{{var}} 仅在 t-attf-$name 内部使用

为了防止 my_var 可能出现的错误为 None (TypeError: must be str, not NoneType),您可以使用 python 字符串格式化:

&lt;t t-set="callUrl" t-value="sale_order.get_portal_url(suffix='/accept_order/%s' % (my_var or '') )" /&gt;

作为发布表单的替代方法,如果您不需要服务器端变量,则可以在 javascript 中呈现模板。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-03
    • 2022-12-18
    • 2012-02-27
    • 1970-01-01
    相关资源
    最近更新 更多