Предположим, в тысяче мест в сотнях представлений я хочу использовать сотню различных методов, большинство из которых возвращают простой текст, но некоторые возвращают (гарантированно безопасно) html:
def colorized_alert_status(foo)
if foo
return "<span class='red'>Alert!</span>".html_safe
else
return "<span class='green'>no problem</span>".html_safe
end
end
Так какнет встроенного метода html_safe
в Sinatra / Haml, есть ли способ пометить саму строку как html_safe, как в Rails, чтобы ее можно было правильно отобразить (как и все остальное) с помощью =?
%p
= colorized_alert_status(var)
То, что я не хочу делать, это то, что в каждом представлении тысячи раз, каждый раз, когда я использую какой-либо метод, нужно помнить или проверять, какие методы ДЕЛАЮТ и НЕ возвращают html, поэтомуиспользовать ли =
или !=
%p
= some_methods_like_this()
!= other_methods_like_this()
ОДНО раз больше смысла, чтобы ОДИН раз за метод "устанавливал" возвращаемое значение как html_safe (или нет), чтобы решение принималось в методекод, а НЕ представление, которое вызывает метод каждый каждый раз, когда метод используется.
(Примечание: при отсутствии «правильного» решения (например, Rails) мы предваряем все имена методов, которые возвращают безопасныйHTML-строка с H_ для экзаменаple h_colorize_foo()
так что, по крайней мере, при написании или просмотре Haml для представления, он дает некоторые указания на то, что нам = или! = для этого конкретного метода.Но это плохая замена для правильного подхода, такого как Rails, для пометки самой строки html_safe, и она не обрабатывает случаи, когда значение, возвращаемое методами, иногда является, а иногда нет html_safe.)