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

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

team: {{ 'Select your team'|trans }}

【问题讨论】:

    标签: javascript jquery symfony twig external


    【解决方案1】:

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

    1. 在 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 %}
    

    1. 借助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。
    猜你喜欢
    • 1970-01-01
    • 2012-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多