Rails + Haml: как убрать параметр тега? - PullRequest
5 голосов
/ 22 августа 2010

Я пытаюсь выполнить следующее содержание в исходном коде:

<div id="box<%=id%>"></div>

Не избегая каких-либо знаков в Хамле.

%div{ :id => "box_<%=id%>" }

производит

<div id='box_&lt;%=id%&gt;'></div>

Прямо сейчас единственный способ, которым я могу сделать это с Haml, - это использовать :plain фильтр и жесткий код HTML без использования View Helpers. Как я могу это исправить?

Мне это нужно, потому что я вынужден следовать этому соглашению из-за стороннего соглашения о синтаксисе: Микротемплейтинг JavaScript

Справка:

Ссылка Haml

Ответы [ 3 ]

4 голосов
/ 22 августа 2010

Вы говорите, что кодируете в Haml, но в скобках указано Erb.

  • Шаг 1 . Попробуйте обычную рубиновую интерполяцию:

    %div{ :id => "box_#{id}" }
    
  • Шаг 2 . Нет шага 2.

Обновление : Когда я писал этот ответ, я раньше не использовал шаблонизацию JS. Приношу свои извинения за то, что не ворчал, почему это было необходимо.

2 голосов
/ 04 января 2011

По сути, просто не используйте HAML для этого одного утверждения. Например, если вы сейчас делаете что-то подобное в HAML:

%script#template(type="text/html")
    %div{ :id => "box_<%=id%>" }

Вместо этого выполните:

%script#template(type="text/html")
    <div id="box_<%=id%>"></div>

Он будет правильно интерпретировать тег сценария как HAML, тогда, поскольку вы не используете %, # и т. Д. Для начала следующей строки, он будет интерпретировать эту строку как простой текст и пропустить ее. Кажется, работает хорошо для меня, и у меня есть очень похожий случай с вашим. Единственное, что я сделал, это изменил тег jQote (движок шаблонов, который я использую для шаблонов Javascript) с % на $ с помощью этого оператора Javascript в head страницы:

%script( type="text/javascript")
    $(function() { $.jqotetag( '$' ); });

Таким образом, знаки % не путают интерпретатор Ruby. Итак, последний пример будет:

%script#template(type="text/html")
    <div id="box_<$=id$>"></div>

Удачи!

0 голосов
/ 09 февраля 2014
...