使用Javascript在运行时使用Symfony和资产

时间:2013-02-03 16:55:33

标签: javascript symfony assets

正如官方Symfony2 docs所述,在Twig模板中,可以链接到资产,如下所示:

<img src="{{ asset('images/logo.png') }}" alt="My logo" />

将呈现logo.png资源的正确路径(取决于Symfony2应用程序所在的文件夹)。

好吧,假设使用必须在运行时加载图像的Javascript代码(例如,作为自动完成的结果),如何在Javascript中实现asset函数提供的相同结果树枝

有些注意事项:

  1. 也许存在像FOSJsRoutingBundle这样的东西,但我真的忽略了它!
  2. 一种肮脏的方式可能是为已知资源生成路径,例如: logo.png文件<script>var known = {{asset('images/logo.png)')}}</script>因此通过将字符串known替换为空字符串来替换变量images/logo.png上的字符串替换路径。但这是一种肮脏的方式!

3 个答案:

答案 0 :(得分:4)

您只需从asset函数中删除文件名即可获得目录的绝对路径:

<script>
    var imgDir = {{ asset('images/') }}
</script>

答案 1 :(得分:1)

很可能,从js文件到图像的路径保持不变。这使您可以在javascript文件中使用“硬编码”路径。

示例:

web
 |
 |--js
 |   |
 |   |--foo.js
 |
 |--images
 |   |
 |   |--pic.jpg

在这种情况下,您可以通过../images/pic.jpg从foo.js访问pic.jpg 请注意,此解决方案在您的树枝视图中不起作用,因为在您的树枝视图中,相对资源网址取决于路径网址。这就是您需要asset功能的原因。

答案 2 :(得分:0)

Twig可以渲染JS文件,而不仅仅是HTML。您可以创建一个Twig模板,该模板将返回包含您需要的所有脚本的JS文件。然后,您可以在此脚本文件中使用所有Twig的功能。