2013-10-03 53 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