外部 JS 文件中的 Twig 变量

Posted

技术标签:

【中文标题】外部 JS 文件中的 Twig 变量【英文标题】:Twig variable in external JS file 【发布时间】:2016-10-02 21:52:09 【问题描述】:

我想将我的 JS 代码外部化,但代码中有 Twig 变量。 你有什么技巧可以让它发挥作用?

team:  'Select your team'|trans 

【问题讨论】:

【参考方案1】:

当您需要将 twig 变量传递给外部 javascript 文件时,有两种方法

    在 twig 模板的脚本块内定义变量
<!DOCTYPE html>
<html>
   <head>
      <title></title>
   </head>
   <body>
       <script>
           var my_twig_var = % if twig_var is defined %' twig_var '% else %null% endif %
       </script>
       <script src="scripts/functions.js"></script>
   </body>
</html>

对于这种方法,我通常在我的主/基本模板中添加一个名为“javascript”的块

base.twig.html

<!DOCTYPE html>
<html>
   <head>
      <title></title>
   </head>
   <body>
       % block body %
       % endblock %
       % block javascript %
       % endblock %
   </body>
</html>

page.html.twig

% extends base.twig.html %
% block body%
    <h1>Hello World</h1>
% endblock %
% block javascript %
    <script>
      alert(' twig_var|default('Hello World') ');
    </script>
% endblock %

    借助data-* 属性将变量传递给javascript
<div data-foo=" foo ">...</div>
$(function() 
    $(document).on('click', '.button', function(e) 
        console.log($('div[data-foo]').data('foo'));
    );
);

旁注:如果您想将对象或数组传递给twig,您始终可以使用json_encode 过滤器,它将变量转换为有效的javascript 对象

如果您想控制json_encode 过滤器公开哪些对象属性,您始终可以实现接口Serializable

【讨论】:

谢谢,我会用你的第一种方法,多练习 我更喜欢使用FOSJsRoutingBundle 生成route 与将twig variables 传递到JS 有什么关系? Path():在给定路由名称和参数的情况下生成 [相对] URL 路径 - url():在给定路由名称和参数的情况下生成绝对 URL。

以上是关于外部 JS 文件中的 Twig 变量的主要内容,如果未能解决你的问题,请参考以下文章

如何根据项目中的实际twig文件创建数据列表

未找到渲染 Sonata Admin Twig 文件的变量形式

更改 JavaScript 中的外部变量

将twig渲染为html文件,避免重复代码添加变量

父模板中的 Twig 设置变量

如何使用变量处理树枝文件中的翻译?