2012-05-18 6 views
19

Sto utilizzando il motore di template di Handlebars sull'app che sto costruendo per rendere i dati che ottengo dal server.Come decodificare l'entità HTML con Handlebars

So che sfugge i valori HTML per impostazione predefinita e che è necessario utilizzare le parentesi quadre {{{text}}} per rendere il rendering di text: <p>Example</p> come un elemento HTML.

Il problema è, che cosa devo fare se i dati che ricevo, inclusi i tag HTML, sono già stati sfuggiti?

Quindi, se ricevo dati come:

text: &lt;p&gt;Example&lt;/p&gt; 

Come forzo manubrio per tradurlo e renderlo come normale HTML?

+2

La maggior parte delle lingue dei modelli presuppone che i dati siano codificati per l'output di destinazione o che sia un testo semplice che richiede la codifica. Non vengono con le caratteristiche di "decodifica dalla codifica arbitary". – Quentin

risposta

36

Devi prima decodificarlo, quindi passarlo al manubrio con le parentesi triple. So che una piccola mancia per decodificare entità HTML con jQuery:

// encoded is "&lt;p&gt;Example&lt;/p&gt" in your example 
var decoded = $('<textarea />').html(encoded).val(); 
// decoded should now return <p>Example</p> 
+2

+1 per usare questo bel trucco per decodificare senza bisogno di '.replace (/>/g, '>') .replace (/ &/g, '&') .replace (/"/g, '"') .replace (/ '/ g, ''') .replace (/ GodLesZ

+0

Grazie, bel trucco :) – Maverick

+0

Non mi dispiace votare due volte per questa risposta se posso. –

4

Manubrio fornisce aiutanti e scrivere un aiuto personalizzato come segue sotto Hanlebars_helpers.js

Handlebars.registerHelper('encodeMyString',function(inputData){ 
    return new Handlebars.SafeString(inputData); 
}); 

e uso questo helper nei file .handlebar o .hbs file come segue

{{encodeMyString myHTMLData}} 

Senza l'aiuto di jQuery si può utilizzare qualsiasi dove dentro il tuo manubrio. Anche tu puoi usare l'helper per passare i dati da solo e che restituiranno i dati con i tag preposti e aggiunti.