3

将 symfony2 与 twig 模板一起使用,我通常使用嵌入在*html.twig文件中的 js 来对页面进行更多的动态化。

如果我的页面附加了外部 JS 文件怎么办?我怎么能在里面引入树枝代码?

我知道这听起来有点过时,但是当尝试从 javascript 重定向到已知的 symfony 路径时,它并没有那么多。像这样:

$.post("{{ path('_check_coupon') }}",{code: coupon_code}, function(json) {
    // do whatever...
});

如您所见,我在一个完全分离的 js 文件中有一个对已知路径的 ajax 调用"_check_coupon"

有什么想法可以解决这个问题吗?

提前致谢

4

2 回答 2

8

您可以将此类路径嵌入data-path到 DOM 元素的属性中,例如:

<div id="widget" data-path="{{ path('_check_coupon') }}"> ... </div>

然后只需获取它:

$.post( $('#widget').data('path') ,{code: coupon_code}, function(json) {
    // do whatever...
});

这是一种普通的方法,但比将 js 和 twig 混合在一个文件中更易于维护——至少你不会得到语法高亮。

当然,如果您正在处理表单,只需获取表单的action属性。


无论如何,我建议您不要在同一页面上同时使用 JS 和标记:您将无法缓存脚本,也无法缩小它们,因此请考虑将它们解耦,除非它只涉及很少的行。随意查看我的小图书馆

于 2012-09-16T16:08:13.427 回答
0

我知道答案很旧,但我遇到了同样的问题,并通过使用verbatim标签找到了以下解决方案。

// {% verbatim %}
(function() {
// {% endverbatim %}
    var val = "{{ myImportVar|raw }}";
// {% verbatim %}

    /**
     * JS Code
     */
     console.log(val);
}());
// {% endverbatim %}

我已经将它们包装在 JS 注释中,以使我的编辑器提示等工作。

于 2017-05-28T00:05:22.267 回答