2012-12-18 20 views
36

Mam kontroler, który przekazuje tablicę do szablonu twig, który chcę użyć w skrypcie napisanym na tej stronie. Jak mam to zrobić?Użyj Javascript, aby uzyskać dostęp do zmiennej przekazanej przez Twig

Próbowałem to w moim .twig szablonu:

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

ale że działa tylko jeśli jest to ciąg znaków.

+1

dodanie prądu wyjściowego i oczekiwane wyjście na swoje pytanie może sprawić znalezienie rozwiązania problemu jest znacznie łatwiejsze. – Supericy

Odpowiedz

125

Można mieć do json_encode tablicy, spróbuj tego:

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

To rozwiązało mój problem dzięki! – ChaoticLoki

+3

Jakieś sugestie, jak zrobić to samo z tablicą obiektów? – belens

+2

Nie zapomnij dodać cudzysłowów 'var test = '{{testArray | json_encode | raw}}';' –

7

pierwsze, wysłać json zakodowanych danych z kontrolera i

potem w JavaScript,

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

, która była dla mnie jedyna :) – Eagle1

+0

Ten kod jest niebezpieczny (XSS) –

+1

@ JoséGabrielGonzález Jak byś to zrobił? – Kangouroops

0

w moim kontrolera Zainstalowałem 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)); 

I w moim pliku Gałązka

<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> 
Powiązane problemy