【问题标题】:Symfony2 - execute TWIG inside JS eventsSymfony2 - 在 JS 事件中执行 TWIG
【发布时间】:2017-02-03 17:21:52
【问题描述】:

我在<script>标签中看到了很多将twig分配给JS变量的例子,所以我决定在click事件中调用twig函数,但不幸的是,无论是否点击,它仍在执行TWIG代码。

$(document).ready(function() {
    $('#sign_up_trainee .btn-social').click(function() {
        {{ app.session.set('name', 'value1') }}
    });
    $('#sign_up_company .btn-social, #sign_up_university .btn-social').click(function() {
        {{ app.session.set('name', 'value2') }}
    });
});

最后,当页面加载时,它正在执行树枝,名称“name”的会话设置为“value2”。 Twig 在 JS 执行之前被渲染。任何想法如何在 JS 中正确执行树枝?

【问题讨论】:

  • 您尝试做的事情是不可能的,因为您自己说twigJS 之前执行,因此您只能将评估函数传递给JS 并将它们存储在变量中。如果你想执行一些twig,你需要通过对控制器的ajax调用来做到这一点
  • 这似乎是一个解决方案。您能否将其发布为答案,以便我确认其为正确答案?

标签: javascript jquery symfony session twig


【解决方案1】:

你误解了 twig 的用途。 Twig 是templating language

这意味着它在将输出发送到浏览器之前在服务器上运行。在返回之前,您可以使用它来模板化一些 JS。

如果正确使用(模板在 xxx.js.twig 文件上运行),则客户端浏览器上的文件中根本不会出现树枝“代码”。

【讨论】:

    【解决方案2】:

    正如您所说,twigJS 之前执行。 Twig 本身被编译成 PHP 并因此在离开服务器之前被解释。

    您可以传递给JS 本身的唯一东西是评估方法并将它们存储为变量,也就是说,如果您将它们放在您的twig 文件中,例如:

    <script>
        var current_date = '{{ "now" | date('d-m-Y') }}';
    </script>
    

    执行twig 方法并获得正确响应的唯一正确方法是使用ajax 调用调用控制器

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-09
      • 1970-01-01
      • 2012-06-17
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多