2013-11-20 14 views
12

Ich schrieb einen einfachen Helfer für meine Vorlage. Hier ist der Code:Lenker Helfer - HTML nicht Text zurück

Handlebars.registerHelper('splitQuote', function (string) { 
    if (string.indexOf('|') !== -1) { 
     return string.replace('|', '<span>') + '</span>'; 
    } 
    return string; 
}); 

Also ich übergeben eine Zeichenfolge, und teilen Sie die Zeichenfolge durch "|" Charakter. Ich möchte auch den zweiten Teil in Span-Tags einfügen.

Problem ist, das Ergebnis, das zurückgegeben wird, ist reiner Text, also bekomme ich Span-Tags wie ein Text, nicht HTML.

Weiß jemand, was ist der Haken?

Tnx

Antwort

31

Sie haben die Zeichenfolge als HTML-Code in Ihre Helfer zu markieren, wenn Sie es nicht, um zu entkommen Lenker wollen. Verwenden Sie dazu Handlebars.safeString. Die unten sollte Ihre Bedürfnisse

Handlebars.registerHelper('splitQuote', function(string) { 
    if (string.indexOf('|') !== -1) { 
     return new Handlebars.SafeString(string.replace('|', '<span>') + '</span>'); 
    } 
    return string; 
}); 

erwähnt passen Wie in den Kommentaren, sollten Sie den übergebenen String entkommen Handlebars.Utils.escapeExpression(string) mit dem String zu kodieren, bevor Sie eine benutzerdefinierte Formatierung tun. Ich würde empfehlen, wie das Schreiben:

Handlebars.registerHelper('splitQuote', function(string) { 
    string = Handlebars.Utils.escapeExpression(string); 
    if (string.indexOf('|') !== -1) { 
     string = string.replace('|', '<span>') + '</span>'; 
    } 
    return new Handlebars.SafeString(string); // mark as already escaped 
}); 
+2

sollten Sie manuell HTML kodieren 'string' vor der Zugabe des' 's, wenn du gehst SafeString zu verwenden. –

7

Sie brauchen, dont SafeString zu verwenden. Verwenden Sie stattdessen die "Triple-Schnurrbärte" von Lenker:

Von Handlebars web site, HTML Escaping Abschnitt:

Lenker HTML-entkommt Werte zurückgegeben durch eine {{Ausdruck}}. Wenn Sie nicht möchten, dass Lenker einen Wert verlassen, verwenden Sie den "Triple-Stash", {{{.

So ein einfaches Dreifach Zitat in Ihrem HTML wird entkommen vermeiden:

{{{splitQuote}}} 
Verwandte Themen