我在模板中定义一个块并将其传递给部分并将其渲染为字符串但是调用部分内部的块似乎会渲染到模板上下文中?
LIB / test.rb
class Test
def render(&block)
view = ApplicationController.new()
view.class_eval do
include ApplicationHelper
end
view.render_to_string(:partial => 'cool_partial', :locals => {
:block => block
})
end
end
控制器/ action.haml
= @test_obj.render do |variable|
%td='hello-world'
应用/视图/ _cool_partial.haml
%table
%tr
(0..5).each do |i|
block.call
输出
<td>hello-world</td>
<td>hello-world</td>
<td>hello-world</td>
<td>hello-world</td>
<td>hello-world</td>
<table>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
</table>
答案 0 :(得分:1)
这实际上是由于HAML内部的一个问题: http://haml.info/docs/yardoc/Haml/Engine.html
由于一些Ruby怪癖,如果scope是Binding或Proc对象并且给出了一个块,那么评估上下文可能不是用户期望的那样。
但是,这可以使用capture_haml
帮助程序解决!
= capture_haml &row_block
你仍然可以使用
传递参数= capture_haml arg1, arg2, &row_block