这是我在ruby on rails应用程序狂欢商务中找到的一种帮助方法。
我正在努力更好地了解这里发生了什么,尤其是第12行的capture()方法,这是我以前从未见过的。如果给出了一个块,它会捕获它,否则就没有内容。但是capture()来自哪里?它在做什么?
11 def hook(hook_name, locals = {}, &block)
12 content = block_given? ? capture(&block) : ''
13 result = Spree::ThemeSupport::Hook.render_hook(hook_name, content, self, locals)
14 block_given? ? concat(result.to_s) : result
15 end
答案 0 :(得分:3)
当您从ERB视图中的块(至少在rails 1.x和2.x)中屈服时,它将直接写入缓冲区,从而写入渲染的html,这可能是不希望的。相反,您可以“捕获”块的评估结果,并将其分配给变量,就像它们在此处所做的那样。无论如何,我可能不会像Ryan Bates那样解释它:
答案 1 :(得分:1)
捕获块允许您从模板文件中取出块,处理它并将其存储在变量中。
API:http://api.rubyonrails.org/classes/ActionView/Helpers/CaptureHelper.html#M002300
这里出现的是,您是否在模板中的块上调用了钩子方法,然后根据spree中的主题(基于模块的名称)对其进行处理然后进行格式化,然后吐出(或者更专业,返回)新格式化的块。