Вставка сгенерированного текста в одну строку с литеральным содержимым с помощью Haml - PullRequest
1 голос
/ 08 апреля 2011
document.write('
- @thumbs.each_with_index do |attachment,index|
  <div><a href="#..."><img src="#..." /></a></div>
');

Код выше выводит что-то вроде этого:

document.write('
<div class="item" style="padding:20;float:left;"><div class="item" style="padding:20;float:left;">
');

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

document.write('<div class="item" style="padding:20;float:left;"><div class="item" style="padding:20;float:left;">');

Ответы [ 3 ]

2 голосов
/ 08 апреля 2011

Создание и использование one_line помощника блока

Помощника

 def one_line(&block)
  haml_concat capture_haml(&block).gsub("\n", '').gsub('\\n', "\n")     
 end

Просмотр

- one_line do
  document.write('
  - @thumbs.each_with_index do |attachment,index|
    <div><a href="#..."><img src="#..." /></a></div>
  ');
1 голос
/ 08 апреля 2011

Используйте строковую интерполяцию в вашем шаблоне для вставки кода Ruby:

document.write('#{@thumbs.map.with_index{ |a,i| '<div>...</div>' }.join}');

Например:

require 'haml'
template = IO.read('tmp.haml')
puts template
#=> document.write('#{ @a.map.with_index{ |n,i| "<div>#{n}-#{i}</div>" }.join }')
@a = %w[a b c]
puts Haml::Engine.new(template).render(self)
#=> document.write('<div>a-0</div><div>b-1</div><div>c-2</div>')
1 голос
/ 08 апреля 2011

Вы можете использовать > и <</a>

Для экзамена:

%ul<
  - 1.upto(5) do |i|
    %li> asdf

Выводит список из одной строки.

В вашем случае:

document.write('
- 1.upto(5) do |i|
  %div>
    %a{ :href => "#..." }>
      %img{ :src => "#..." }>
);
...