通过ruby过滤器输出haml内容

通过ruby过滤器输出haml内容,ruby,haml,middleman,Ruby,Haml,Middleman,当我使用:ruby过滤器在haml中做一些简单的事情时,例如 :ruby to = comments > max_comments ? max_comments : comments (0...to).each do |i| comment = data[i] puts li_comment comment[0], comment[1], comment[2] end put语句将输出写入控制台。这表明 创建名为haml\u IO的IO对象,写入该对象的任何内

当我使用
:ruby
过滤器在haml中做一些简单的事情时,例如

:ruby
  to = comments > max_comments ? max_comments : comments
  (0...to).each do |i|
    comment = data[i]
    puts li_comment comment[0], comment[1], comment[2]
  end
put
语句将输出写入控制台。这表明

创建名为
haml\u IO
的IO对象,写入该对象的任何内容都将输出 进入Haml文件


如何准确地使用haml_io对象写入haml文档,而不是写入控制台(我想我需要的不是
put
)?

。。。呼叫接通了haml\U io

写入它的任何内容都会输出到Haml文档中

这种行为——旧的行为(版本4.0之前)是将任何写入标准的内容写入Haml文档,但这不是线程安全的

haml_io
是一个。重写代码以使用它时,代码的外观如下所示(假设前面定义了
注释
最大注释
li_注释
):


haml_io
实际上是一个函数,因此您可以使用它的任何方法,例如
haml_io.write
haml_io.putc
,它会将输出重定向到您的文档。

请注意,如果您使用的是渲染器而不是普通的,那么它的语法也会有所不同。看起来您只需要从筛选器返回所需的值

标准的haml API似乎都不起作用:

[46] pry(main)> Hamlit::Template.new() { ":ruby\n  puts 'aaa'" }.render
aaa
=> ""

[47] pry(main)> Hamlit::Template.new() { ":ruby\n  haml_io.puts 'aaa'" }.render
NameError: undefined local variable or method `haml_io' for #<Object:0x00007f9ec2f178a0>
from (__TEMPLATE__):1:in `__tilt_70159905806200'

[49] pry(main)> Hamlit::Template.new() { ":ruby\n  'aaa'" }.render
=> ""
我就此事发表了一篇文章,以供参考:

[46] pry(main)> Hamlit::Template.new() { ":ruby\n  puts 'aaa'" }.render
aaa
=> ""

[47] pry(main)> Hamlit::Template.new() { ":ruby\n  haml_io.puts 'aaa'" }.render
NameError: undefined local variable or method `haml_io' for #<Object:0x00007f9ec2f178a0>
from (__TEMPLATE__):1:in `__tilt_70159905806200'

[49] pry(main)> Hamlit::Template.new() { ":ruby\n  'aaa'" }.render
=> ""
[50] pry(main)> Hamlit::Template.new() { ":ruby\n  return 'aaa'" }.render
=> "aaa"