2016-08-24 4 views
0

Ich versuche, einen Lenkerhelfer zu schreiben, der die aktuelle URL-Abfragezeichenfolge ausspuckt. Ich werde dann diese Abfragezeichenfolge verwenden, um eine Vorlage zu füllen. Ich verwende assemble, um die HTML-Dateigenerierung durchzuführen.Aktuellen URL-Abfrage-String abrufen

Meine URLs sehen so aus: groups/group-details/?id=1 und ich möchte den ID-Wert bekommen.

Hier ist mein Helfer:

Handlebars.registerHelper('currentId', function() { 
    return document.location.search.split('?')[1].split('=')[1]; 
}); 

Und ich rufe es in meinem .hbs Vorlage wie folgt aus:

{{currentId}} 

ich es erwarte 1 in diesem Beispiel nur ausspucken, aber nichts wird gezeigt.

Wohin gehe ich falsch?

- Bearbeiten -

Graben um im Web-Inspektor Konsole zeigt mein Helfer registriert ist, aber wenn ich einen Haltepunkt in der return-Anweisung setzen, wird es nie getroffen. Ich nehme an, der Helfer wird gerade nicht "ausgeführt".

Antwort

2

Wenn Sie den HTML-Code mit assemble erstellen, macht assemble einen Render-Durchlauf mit Handlebars. Dieser Render-Durchlauf würde versuchen, die {{currentId}} Vorlage auf dem Server aufzulösen.

Wenn es das tut, würde ich einen Fehler innerhalb des Helfers erwarten, da document.location.search nicht verfügbar ist. Da Sie dort keinen Fehler bekommen, gehe ich davon aus, dass der Helfer nicht bei assemble registriert ist und nur bei Ihrer Frontend-Instanz von Lenker. Wenn es nicht mit assemble registriert ist, wird {{currentId}} als Wert von Handlebars interpretiert und rendert nichts.

TL; DR;

Beim Mischen von Front-End-Vorlagen und Back-End-Vorlagen müssen Sie die Front-End-Vorlagen umgehen, damit sie im Back-End-Prozess nicht gerendert werden. Versuchen Sie, \{{currentId}} zu verwenden, um zu sehen, ob der Helfer verwendet wird.

+0

Ok, ich verstehe, was Sie sagen. Das Einfügen von '\ {{currentId}}' gibt nur '{{currentId}}' im generierten HTML aus. – boz

+0

Rendern Sie auch Vorlagen im Browser? Wenn nicht, dann glaube ich nicht, dass "document" auf dem Server verfügbar ist, so dass es zu diesem Zeitpunkt keine Abfragezeichenfolge gibt. – doowb

+0

Ich bin nicht, nein.Was Sie über den Query-String sagen, ist durchaus sinnvoll. Ich muss meinen Ansatz ändern und Vorlagen für diesen Satz von Seiten im Browser rendern. – boz

1

Nicht wirklich sicher, warum Sie falsch liegen.

Aber ich würde hier eine Regex verwenden.

für das Parsen 1 aus groups/group-details/?id=1

var a = (new RegExp('/?id=(\d)+')); 
var v = a.exec('groups/group-details/?id=1')[1]; 
console.log(v); 

Auch habe ich versucht, aus

"groups/group-details/?id=1".split('?')[1].split('=')[1]

und es kehrt 1 in Ordnung.

Der Grund, warum ich mit Regex gehen würde, ist, dass Sie bereits zwei String-Manipulationen machen, die nicht der effizienteste Weg sein könnten.