2012-05-18 5 views
19

Я использую механизм шаблонов Handlebars в приложении, которое я создаю, для визуализации данных, которые я получаю с сервера.Как декодировать объект HTML с Handlebars

Я знаю, что он избегает значений HTML по умолчанию и что вы должны использовать тройные скобки {{{text}}}, чтобы text: <p>Example</p> отображался как элемент HTML.

Проблема в том, что делать, если данные, которые я получаю, включая теги HTML, уже экранированы?

Так что, если я получаю данные, такие как:

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

Как заставить рули, чтобы перевести его и сделать его как обычный HTML?

+2

Большинство языков шаблонов предполагают, что данные либо закодированы для целевого вывода, либо представляют собой обычный текст, который требует кодирования. Они не снабжены функциями «декодировать из двоичного кодирования». – Quentin

ответ

36

Сначала вы должны его декодировать, а затем передать его рулям с тройными скобками. Я знаю, что небольшой наконечник для декодирования HTML сущностей с 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 для использования этого приятного взлома для декодирования без необходимости «.replace (/>/g, '>') .replace (/ &/g, '&') .replace (/"/g, '"') .replace (/ '/ g,' ' ') .replace (/ GodLesZ

+0

Спасибо, хороший трюк :) – Maverick

+0

Я не возражаю против голосования дважды за этот ответ, если смогу. –

4

Рули предоставляет хелперы и написать специальный помощник, как следует под Hanlebars_helpers.js

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

и использовать этот хелпер в ваших .handlebar файлов или .hbs файлов следующего

{{encodeMyString myHTMLData}} 

Без помощи Jquery вы можете использовать его любой где внутри ваших рулей. Даже вы можете использовать хелпер для передачи данных в отдельности и которые возвратят данные с добавленными и добавленными тегами.

Смежные вопросы