如何使Twig Globals在JavaScript库中可访问

时间:2019-01-23 14:31:15

标签: javascript twig include

我正在重构一个树枝模板,其中包括大量的javascript函数,这些JavaScript函数应组织到一个单独的库中,以使结构远离逻辑。所以我移动了它们,并像链接库一样:

<script type="text/javascript" src="../global/jscripts/jslibrarytest.js"></script>

这里的问题是这些库中有一些正在使用twig全局变量。大多数功能都可以正常运行,但其他一些功能则不能。

我尝试通过html代码传递它,并通过jquery(test1)接收它,但我无法使其工作。 然后,我尝试直接访问它。

我的模板包括以下内容:

<div id="twig-vars" data-test="{{ twig_variable }}"></div>
<script>
    $(".boton-excel").click(function() {
          $("#target_data").val(fooFunction);
          alert({{ twig_variable }});
    }); 
</script>

外部javascript

function fooFunction(){
   var test1= $('#twig-vars').data('test');//
   var test2= "{{ twig_variable }}";
   var test3= {{ twig_variable }};//syntax error
   alert(test1);
   alert(test2);
}

警报中的输出为:

  1. 测试1 =>未定义
  2. 测试2 => {{twig_variable}}
  3. twig_variable =>成功

2 个答案:

答案 0 :(得分:1)

我在上面用了一个不好的例子。我在html中使用的是

<div id="twig-vars" data-newRoute="{{ URL_Symfony_dev }}"></div>

所以js是:

var test= $('#twig-vars').data('newRoute');
alert(test);

哪个没用。但是这个问题(名字中的驼峰大小写)无法通过我给出的示例检测到。我很抱歉 经过数据测试的重新措辞后,我注意到了这一点,所以最终在html中找到了它。

<div id="twig-vars" data-newroute="{{ URL_Symfony_dev }}"></div>

在我的JS中:

var test= $('#twig-vars').data('newroute');
alert(test);

有效。 我是这个地方的新手,我不知道是否应该编辑原始问题。任何帮助也表示赞赏。

编辑:使用class(。)而不是id(#)将仅捕获第一个html,即使属性名称不同。这意味着:

<div **class**="twig-vars" data-**test1**="{{ URL_Symfony_dev }}"></div>
<div **class**="twig-vars" data-**test2**="{{ URL_Symfony_dev }}"></div>
<div **class**="twig-vars" data-**test3**="{{ URL_Symfony_dev }}"></div>

var test1= $('.twig-vars').data('test1');
var test2= $('.twig-vars').data('test2');
var test3= $('.twig-vars').data('test3');
alert(test1);//output-> correct result
alert(test2);//output-> undefined
alert(test3);//output-> undefined

答案 1 :(得分:1)

您无需添加额外的html即可将变量传递到树枝,如此处所示

树枝文件

<!DOCTYPE html>
<html>
   <head>
      <title></title>
   </head>
   <body>
       <script>
           var my_route = {% if URL_Symfony_dev is defined %}'{{ URL_Symfony_dev }}'{% else %}null{% endif %}
       </script>
       <script src="scripts/functions.js"></script>
   </body>
</html>

functions.js

$(function() {
    alert('The route is '+my_route);
});