2013-10-03 55 views
8

如何将{{app.user}}传递给Javascript?使用Javascript中的变量树枝

现在我做一个块;

<script type="text/javascript"> 
    var app_name = '{{ app_name }}'; 
    var app_url= '{{ app_url }}'; 
    var app_description= '{{ app_description }}'; 
    var app_email= '{{ app_email }}'; 
    var app_title= '{{ app_title }}'; 
    var app_dominio= '{{ app_dominio }}'; 
    var env = '{{ app.environment }}'; 
</script> 

其中,这些参数在config.yml设置

回答

14

我不明白这正是你与你选用的解决问题,应该区别在于应用与{{app.user}}运行良好。用户是一个对象,所以你应该有一个指定者fonction到您的用户,并呼吁:

app_user = {{ app.user.toArray|json_encode() }}; 

或拨打用户的每个参数如{{app.user.id}}

参见:http://twig.sensiolabs.org/doc/filters/json_encode.html

顺便说一句,你应该使用json_encode你上面的变量,如果你有一个你的字符串的报价它会打破你的JavaScript。

示例配置文件:

<script type="text/javascript"> 
    nickname = {{ profile.nickname|json_encode() }}; // Nickname will be a string 
    // 2nd solution if you have more informations related to profile 
    profile = { 
     nickname: {{ profile.nickname|json_encode() }}, 
     lastname: {{ profile.lastname|json_encode() }} 
    }; 
    // Profile is now an object with a nickname property. 
    // use profile.nickname on your javascripts 
</script> 
+0

例如我在树枝 {{profile.nickname}}中有这个var,如果我想在我的javascript中使用{{profile.nickname}}的值? – Barno

+1

我已经更新了我的答案。 – zapcost

+0

感谢您的回复! – Barno

0

使用属性或任何标签

例如:<span profile="{{ profile.nickname }}"></span>

10

接受的解决方案不因为树枝的工作(?再)autoescaping输出,更改所有JSON "&quot;。

相当于现在将不得不使用raw过滤器:

<script type="text/javascript"> 
    nickname = {{ profile.nickname|json_encode()|raw }}; // Nickname will be a string 
    // 2nd solution if you have more informations related to profile 
    profile = { 
     nickname: {{ profile.nickname|json_encode()|raw }}, 
     lastname: {{ profile.lastname|json_encode()|raw }} 
    }; 
    // Profile is now an object with a nickname property. 
    // use profile.nickname on your javascripts 
</script> 

如此说来,直接打印原始JSON到JavaScript可能会导致一些问题,在这个配置:

<script> 
    var myvar = {{ '{"test": "</script>"}'|raw }}; 
</script> 

JSON中的</script>标记将被HTML解析器解释,导致脚本中断。

而真正正确的方式做,这宁愿打印JSON作为一个转义字符串,然后JS脚本内对其进行分析:

<script> 
    var myvar = JSON.parse('{{ '{"test": "</script>"}'|e('js') }}'); 
</script> 
0

试试这个:

var title = '{{ 'My Daily Activities'|trans({}, 'general') }}'; 

与额外的apostrophy