2012-12-18 65 views
36

我有一個控制器將數組傳遞給樹枝模板,我想在該頁面上編寫的腳本中使用該模板。我會怎麼做呢?使用Javascript訪問通過Twig傳遞的變量

我已經在我的.twig模板嘗試這樣做:

<script> 
    $(document).ready(function(){ 
     var test = {{ testArray }}; 
}); 
</script> 

但只有當它是一個字符串工作。

+1

添加電流輸出和預期輸出你的問題可以找到解決問題的方法要容易得多。 – Supericy

回答

125

您可能需要json_encode數組,試試這個:

<script> 
    $(document).ready(function(){ 
     var test = {{ testArray|json_encode|raw }}; 
    }); 
</script> 
+3

這解決了我的問題,謝謝! – ChaoticLoki

+3

任何建議如何做一樣的對象數組? – belens

+2

不要忘記加引號 'var test ='{{testArray | json_encode | raw}}';' –

7

首先,發送從控制器編碼的數據JSON和JavaScript的

然後,

var context= JSON.parse('{{ YourArrayFromController|raw}}'); 
+0

這是我的:) – Eagle1

+0

此代碼是不安全的(XSS) –

+1

@JoséGabrielGonzález你會怎麼做? – Kangouroops

0

在我的控制器我安裝SerializerBundle

$serializer = $this->get('serializer'); 
     $countries = $this->getDoctrine()->getRepository("QSCORBundle:CountryMaps")->findAll(); 
     $jsonCountries = $serializer->serialize($countries, 'json'); 
return $this->render('QSCORBundle:Default:index.html.twig',array("countries"=> $jsonCountries)); 

,在我的文件嫩枝

<script type="text/javascript" > 
var obj = {{ countries|json_encode|raw }}; 
var myObject = eval('(' + obj + ')'); 

console.log(myObject[0]['capital_latitude'] + " " + myObject[0]['capital_longitude']);//for the First Element 
</script>