Ruby методы в Javascript в HAML
У меня есть скрипт jQuery, который добавляет новое поле в форму, и это поле содержит динамическую информацию из массива. Проблема в том, что я не могу понять, как добавить массив.каждый из них заполняет параметры поля select в javascript, не нарушая отступ HAML и не вызывая ошибок.
вот моя лучшая попытка, которая не работает:
%script(type="text/javascript")
$('#mylink').click(function() {
$('#mylink').after('<select>
- myarray.each do |options|
<option value="#{options.id}">#{options.name}</option>
</select>);
)};
также попробовал его с фильтром: javascript без успеха.
2 ответа:
обычно, если что-то болит в haml, это означает, что вы должны рефакторировать сложный бит для помощника или частичного и вызвать это.
// some_helper.rb def new_snazzy_select_tag(options = []) select_tag 'tag_name_here', options.map { |option| [option.id, option.name] } end
кроме того, вы должны использовать
:javascript
фильтр для рендеринга javascript, так как он поместит его в тег скрипта для вас и разрешит отступ.наконец, вы можете использовать
#{ruby_expression}
в любом месте в haml, в том числе:javascript
фильтры, что очень удобно, когда вам нужно вывести результат выражений ruby в места, которые не являются непосредственно содержимое HTML-элементов.// some_view.html.haml :javascript $('#mylink').click(function() { $('#mylink').after("#{escape_javascript new_snazzy_select_tag(myarray)}"); };
попробуйте это, он должен работать (все, что я сделал, это удалить один пробел в пятой строке и добавить заключительную цитату на шестой):
%script(type="text/javascript") $('#mylink').click(function() { $('#mylink').after('<select> - @myarray.each do |options| <option value="#{options.id}">#{options.name}</option> </select>'); )};
однако, предполагая, что вы запускаете это с помощью сценария ruby или фреймворка, почему бы просто не сделать это вне шаблона? Это, вероятно, было бы наиболее подходящим. В rails / sinatra и других фреймворках для этого можно использовать вспомогательный метод. Если вы посмотрите на ссылку haml, они фактически препятствуют использованию
-
оценить рубин.