使用Haml将生成的文本插入与文字内容相同的行中

时间:2011-04-08 04:04:43

标签: ruby haml

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 个答案:

答案 0 :(得分:2)

创建并使用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 :(得分:1)

您可以使用> and <

例如:

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

将输出一行列表。

在你的情况下:

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

答案 2 :(得分:1)

在模板中使用字符串插值来内联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>')