Nunjucks Funktionsargumente kommen undefiniert an

8

Ich benutze Nunjucks seit mehreren Monaten und habe festgestellt, dass es eine großartige Template-Engine ist. Heute Morgen bin ich auf ein Problem gestoßen, das einfach scheint, aber ich kann es einfach nicht herausfinden. Ich hoffe, dass ein anderer Satz von Augen helfen kann, auf die Lösung hinzuweisen.

Das Problem: Wenn ich eine Funktion an eine Vorlage übergebe, sind alle Argumente, die an diese Funktion übergeben werden, innerhalb des Funktionskörpers nicht definiert.

Werte und Objekte können ohne Probleme an Vorlagen übergeben werden, und wenn ich eine Funktion übergebe, kann ich mich von der Funktion aus in der Konsole anmelden (also weiß ich, dass die Funktion selbst da ist), aber die Argumente sind alle undefiniert.

Das schien zunächst etwas zu sein, das mit einem Abschluss gelöst werden konnte, aber 1) Ich sehe keine Verschlüsse in irgendwelchen Beispielen, die ich finden kann, und 2) als ich eine Schließung versuchte, fand ich, dass sie auch undefinierte Argumente erhielten.

>

Im Laufe des Tages habe ich meinen Code wieder auf den einfachsten Fall reduziert und kann das immer noch nicht herausfinden:

Die Vorlage:

%Vor%

Der Code, der die Vorlage rendert (dies ist innerhalb einer Definition von requirejs, nicht gezeigt):

%Vor%

und das gerenderte HTML sieht so aus:

%Vor%

Also, ein Wert ist in Ordnung. Das Objekt funktioniert auch und sieht sogar gut aus, nachdem es den "hübschen" Filter durchlaufen hat.

Ein Wert, der an "func" übergeben wird, wird jedoch im Funktionskörper nicht definiert, und die Verwendung der Argumentvariablen in der Funktion hilft nicht. Darüber hinaus funktioniert die Übergabe einer Funktion direkt in den Vorlagenkontext (lokal) auch nicht.

Filter (die im Grunde nur Funktionen sind) funktionieren gut, aber normale Funktionen nicht, ob sie als Teil des Vorlagenkontexts oder als globale übergeben werden.

Einige Hinweise, die helfen könnten:

  • Ich benutze requirjs, obwohl ich versucht habe (außer das Importieren von Nunjucken selbst), es aus der Gleichung zu eliminieren.

  • In diesem Beispiel wird Nunjucks v1.3.4 verwendet. Im Laufe des Debuggens habe ich versucht, dieses Verhalten in Version 2.1 zu überprüfen, aber es scheint, dass v2.x die Kompatibilität von requirej unterbrochen hat, und ich wollte nicht zwei Probleme parallel angehen.

  • Ich überarbeite meine Vorlagen mit Grunt-Nunjacks und haue dann das Ergebnis. Die relevanten Teile meiner Gruntfile sind wie folgt:

    %Vor%

Die Testvorlage (siehe oben) ist eine von mehreren, die in common.js kompiliert und dann mit den obigen Einstellungen in common.min.js egglifiziert werden. Beachten Sie, dass ich versucht habe, die Vorlagen zu kompilieren, ohne sie zu ugglifying, aber das gleiche Ergebnis zu erhalten.

Das ist ziemlich grundlegende Funktionalität. Wenn das ein Fehler wäre, würde ich erwarten, viele Referenzen auf SE und im Problemprotokoll zu sehen, aber ich konnte kaum irgendwelche finden. Ich nehme an, ich vermisse etwas wirklich Offensichtliches, aber ich kann es einfach nicht finden.

Irgendwelche Gedanken?

    
gary 02.10.2015, 23:51
quelle

1 Antwort

2

Nachdem ich Debugging fortgesetzt habe, habe ich schließlich eine Glueckserstellung vorgenommen und requiresjs mit dem folgenden Testaufbau aus der Gleichung herausgenommen:

index.html:

%Vor%

Meine Vorlage, die in common.js vorkompiliert ist:

%Vor%

test.js ist der Code, der die Vorlage ausübt:

%Vor%

Schließlich die Ausgabe, die das Problem (mit zusätzlichen Kommentaren) zeigt:

%Vor%

Ich habe mehrere Stunden damit verbracht, den kompilierten Template-Code durchzublättern, um das Problem zu finden (was übrigens sehr informativ war), dann mit dem Gesicht nach oben - da ich requirejs eliminiert hatte, konnte ich es mit% co_de noch einmal versuchen %.

Ein paar Klicks später hatte ich den Testcode:

%Vor%

Obwohl es schön gewesen wäre, das Problem zu lösen (mit v1.3.4), scheint die Antwort "upgrade auf nunjucks v2.1.0" zu sein.

    
gary 03.10.2015, 17:18
quelle

Tags und Links