2017-05-24 3 views
0

Ich habe eine Objektvariable, die nur Daten enthält, wenn von innerhalb eine for x in y Schleife zugegriffen wird.Zweig variabler Bereich - global nur innerhalb der Schleife verfügbar

Dies geschieht innerhalb einer Feldvorlage für ein Drupal 8-Thema, wobei das Ziel darin besteht, auf den Wert eines gleichgeordneten Felds zuzugreifen.

Vereinfachte Schnipsel:

{% for x in [1] %} 
    Inside loop = {{ _parent.element['#object'].get('field_section_theme').value }} 
{% endfor %} 

Outside loop = {{ _parent.element['#object'].get('field_section_theme').value }} 

Ausgang:

Inside loop = normal 
Outside loop = 

Ich verstehe, würde, wenn eine Variable, die war außerhalb nicht verfügbar in einer Schleife gesetzt war, aber das ist nicht verwandt, genommen aus die _context der Vorlage selbst.

Meine Problemumgehung der Umhüllung eines Verweises auf die Variable in einer einfachen einmaligen for Schleife hat mein unmittelbares Problem gelöst, aber ich würde gerne verstehen, was hier passiert!

(ich würde auch eine sauberere Art und Weise als die for x in [1] Ansatz, aber normalerweise bevorzugen, wenn Sie nur etwas ausgeführt werden soll, wenn Sie es nur aufschreiben!)

+0

Hat nicht machen Sinn. Sie sollten etwas zusätzlichen Code zur Verfügung stellen, um das wirkliche Problem hier herauszufinden – DarkBee

+0

Es macht überhaupt keinen Sinn, daher die Frage :) Es ist eine Feldvorlage für ein Drupal 8 Thema - dieser Code greift auf den Wert in einem Geschwisterfeld ('field_section_theme'). Es gibt keinen * code * Kontext, da diese Zeilen isoliert die Eigenheiten reproduzieren.(Ich bin gleich zu Beginn der Erstellung der Vorlage darauf gestoßen.) – Jimaginary

+0

Nicht alle Variablen, die für eine Seite verfügbar sind, sind in jeder Vorlage verfügbar. Es hängt davon ab, welche Vorlage Sie verwenden und sollte in Kommentaren am oberen Rand der Vorlage angezeigt werden. – garek007

Antwort

2

Dies ist ein Scoping-Fehler war, auf Grund meiner Missverständnis, wie und wo _parent definiert wurde - ich nahm an, dass es von Drupal zur Verfügung gestellt wurde, wo logisch das "Elternteil" des Feldes, das ich gerade rendere, die Knotenentität ist, die wiederum das andere Feld enthält, auf das ich zu verweisen versuche.

jedoch scheint _parent ein Zweig Konstrukt, mit _parentinnerhalb die Schleife auf der Hauptbereich der Vorlage, während unter Bezug _parentaußerhalb die Schleife macht keinen Sinn.

Es ist ziemlich offensichtlich im Nachhinein, aber da mein Code Leben innerhalb einer Schleife und die Selbst> Eltern> Geschwister Weg begann ich wurde mit Sinne gemacht (in einem Drupal Kontext) Ich konnte nicht verstehen, warum die Variablen nicht verfügbar waren außerhalb der Schleife.

Ich kann nicht viel nützliche Dokumentation auf _parent überhaupt finden, so dass alle Links geschätzt werden.


Fixing meines spezielles Problem so einfach war, wie _parent von dem "Außenschleife" Zugriffspfad zu entfernen, das heißt Ändern

Outside loop = {{ _parent.element['#object'].get('field_section_theme').value }}

zu

Outside loop = {{ element['#object'].get('field_section_theme').value }}

+0

Gute Arbeit, froh, dass du es herausgefunden hast – garek007

+0

Eins, an das du dich erinnern kannst :) – DarkBee