2017-11-02 1 views
-1

Ich übergebe PHP-Array mit 11 Elementen zu Javascript über Zweig, und es funktioniert gut. Einige Elemente von array sind null, einige sind mehrdimensionale arrays. Das ist mein js Code:Symfony 3 - Javascript Variable an Zweig Asset übergeben

var slot = {{ slot|json_encode|raw }}; 

     for(var i = 1; i<= 11; i++) { 

      if (slot[i - 1] === null) { 
       document.getElementById("slot_" + i).style.backgroundImage = "url('{{ asset('grafiki/empty.jpg') }}')"; 
      } 
      else { 
       document.getElementById("slot_" + i).style.backgroundImage = "url('{{ asset('grafiki/' ~ slot[1].name ~ '.jpg') }}')"; 
      } 
     } 

Wie Sie mein Skript sehen können, Hintergrundbilder von HTML-Elementen mit bestimmten ID zu ändern, und es funktioniert gut. Das Problem ist, dass ich ändern müssen: ~ slot[1].name ~ zu ~ slot[i-1].name ~, aber dann wirft Symfony Fehler:

Variable "i" does not exist. 

Aber wenn ich ganze Linie zu console.log(slot[i-1].name) ändern wird der Name Eigenschaft eines perfekt Objekt.

ich auch assign Wert der Variablen versucht, und es dann zu Asset-Pass:

var name = slot[i-1].name; 
document.getElementById("slot_" + i).style.backgroundImage = "url('{{ asset('grafiki/' ~ name ~ '.jpg') }}')"; 

Aber dann Fehler, die ich bekam: Variable "name" does not exist. ich mit diesem wirklich bin stecken, jemand mir helfen könnte?

+1

Javascript-Variable ist auf der Vorderseite verfügbar. Twig wird im Backend geparst. Sie existieren nicht im selben Kontext. – dmnptr

+0

Warum funktioniert slot [1] .name? Es ist auch Javascript Variable. – Petrus

+1

Es ist keine Javascript-Variable innerhalb dieser doppelten geschweiften Klammern. Haben Sie zufällig eine Zweigvariable 'slot'? – dmnptr

Antwort

0

Sie sollten Ajax einen weiteren Endpunkt für Slot-Variablen anfordern. Dieser Endpunkt gibt das Slots-JSON-Format zurück und Sie können diese Variablen verwenden.

+0

Ich weiß, aber ich möchte Datenbankabfrage vermeiden. Gibt es einen anderen Weg, Bilder über asset() zu erreichen? – Petrus

+0

Bereits schreiben Sie jetzt Abfrage für Slots Ihr Back-End. Nur Sie sollten die Abfragecodes für die Ajax-Anforderung an den Endpunkt verschieben. –

+0

Nein, ich habe gerade die Funktion asset() aufgegeben und verwende statt dessen exact directory /my_project/web/grafiki/item.jpg und JavaScript-Verkettung. Es funktioniert gut. Danke für deine Mühe. – Petrus

Verwandte Themen