2014-02-28 4 views
7

HTML und Lenker:Lenker spezifische - escape sowohl einfache und doppelte Anführungszeichen, wenn Lenker Ausdruck vorbei

onclick='shareItem("{{name}}")'> 

Hat erfolgreich keinen Namen sicher entkommen passieren, wenn es doppelte Anführungszeichen in ihm hat.

onclick="shareItem('{{name}}')"> 

Erfolgt nicht erfolgreich übergeben einen Namen mit sicheren Escapezeichen, wenn es einzelne Anführungszeichen enthält.

Ich muss beide Eventualitäten behandeln - und sogar in der gleichen Zeichenfolge.

Es fühlt sich schlampig an, eine JS-Variable definieren zu müssen und sie an einen Backslash-Addierer zu übergeben.

Gibt es eine sauberere Möglichkeit, dies mit Lenker oder Schnurrbart zu tun?

Antwort

12

Sie müssen eine inline helper registrieren, die den Kontext manipuliert. In Ihrem Fall müssen Sie ein einzelnes oder doppeltes Zitat vermeiden.

Handlebars.registerHelper('escape', function(variable) { 
    return variable.replace(/(['"])/g, '\\$1'); 
}); 

Durch eine solche Helfer registrieren, können Sie es mit einer Variablen verwenden, um zu erreichen, was Sie wollen.

{{ escape name }} # expects to escape any ' or " 

Ich schrieb ein einfaches Beispiel die auf jsfiddle zu demonstrieren: http://jsfiddle.net/VLy4L/

+0

Danke für die Antwort! Das Problem, das ich hier sehe, ist, dass ich die Variable direkt in das onClick-Ereignis als Ausdruck hinzufüge - und das ist der Punkt, an dem es bricht. Der einzige Weg, den ich gesehen habe, war, den Ausdruck in Javascript zu schreiben, was ... sich schlampig anfühlt. – Kate

+1

@Kate Vielleicht könnten Sie ['data- *' attributes] (https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Using_data_attributes) verwenden, um Daten vorübergehend zu speichern und dann innerhalb des Javascript darauf zuzugreifen Funktion? –

+0

Danke, Seyeong! Ich ging weiter und tat es auf diese Weise - das gesamte Objekt mit dem Ereignis onClick übergeben, nachdem ich den Namen als Daten-Attribut * festgelegt hatte. – Kate

0

Ich habe ein Problem einfache Anführungszeichen zu entkommen versuchen, und ich verwende die Helfer, die handleblars bereitstellen, können Sie die dreifachen Klammern verwenden {{{ Variable}}} für Escape

Verwandte Themen