2013-11-20 17 views
12

Napisałem prostego pomocnika do mojego szablonu. Oto kod:Pomocnik kierownicy - powracający HTML nie tekstowy

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

Przekazuję ciąg i dzielę ciąg przez "|" postać. Chcę również umieścić drugą część w znacznikach zakresu.

Problem polega na tym, że zwracany wynik to czysty tekst, więc otrzymuję tagi span, takie jak tekst, a nie HTML.

Czy ktoś wie, co jest haczykiem?

Tnx

Odpowiedz

31

Trzeba zaznaczyć ciąg jako HTML w swoim pomocnikiem, jeśli chcesz kierownicy, aby nie uciec. W tym celu użyj Handlebars.safeString. Poniższa powinna własnych potrzeb

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

Jak wspomniano w komentarzach powinieneś uciec przekazany ciąg przy użyciu Handlebars.Utils.escapeExpression(string) zakodować ciąg zanim zrobisz formatowanie niestandardowe. Zalecam pisanie w ten sposób:

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

należy ręcznie HTML zakodować 'string' przed dodaniem' 's jeśli masz zamiar używać SafeString. –

7

Nie musisz używać SafeString. Zamiast korzystać z "triple wąsy" z Kierownica:

Od Handlebars web site, HTML sekcja Uciekając:

Kierownice HTML wymyka wartości zwracane przez {{wyrażenie}}. Jeśli nie chcesz, aby kierownica wymykała się wartości, użyj "potrójnego skrytka", {{{.

Więc prosty potrójny cytat w HTML pozwoli uniknąć ucieczki:

{{{splitQuote}}}