用于不同Padrino haml助手的用例

gho*_*fly 6 ruby haml view padrino

我阅读http://www.padrinorb.com/guides/application-helpers但我不清楚每个视图助手的用例是什么.具体来说,content_for/yield_content, render/partial, capture_html, and concat_content所有人如何融合在一起?

现在,我一直在使用render 'my/view'我的控制器和一些投掷=partial 'my/partial''my/view'刚掰开主模板文件成小块.

是正确的方法吗?何时/何地我想使用其他辅助函数?

小智 12

我们来看看用例.

  1. content_for/yield_content

这是为了将内容注入可能有用的布局文件中.示例是将其他css /脚本添加到另一个模板的布局中.指南中的示例是相同的,显示如何从任何需要它们的模板将CSS文件添加到布局.您还可以使用它将内容添加到侧边栏,附加链接等.它适用于不需要自己的模板但需要根据显示的视图将信息传递回布局的内容.

  1. 渲染/部分

render用于显示与路径关联的给定模板.处理路径后,渲染应该用于主要操作.partial就像是视图中的'方法'.它可以重用,并且可以传递变量来更改输出.您可以在主模板中使用partial来分解代码并重用可能看起来多余的视图.

  1. capture_html/concat_content

这通常用于创建自己的帮助程序,以获取内容块.例如,让我们创建一个帮助程序,它接受一个haml块并将其包装在div中.用法如下:

# template.haml
# NOTE the equals so the content is returned 
# and added to the view directly
= div_wrapper do 
  %h1 Some heading
  %p This is now wrapped in a div
Run Code Online (Sandbox Code Playgroud)

要实现这一点并在模板中使用它,您需要能够"捕获"传递给块的haml,以便处理然后围绕它包装div.这就是capture_html的用武之地:

def div_wrapper(&block)
   nested_content = capture_html(&block)
   content_tag(:div, nested_content)
end
Run Code Online (Sandbox Code Playgroud)

这将获取内容并将其吐出到包含在div中的视图中.现在,让我们假设我们希望这个帮助程序更复杂,因此您希望使用更像这样:

# template.haml
# NOTE the dash so the content is not outputted directly
- div_wrapper do 
  %h1 Some heading
  %p This is now wrapped in a div
Run Code Online (Sandbox Code Playgroud)

但它也适用于其他助手:

# some_helper.rb
def example(name)
  div_wrapper { "<h1>Test</h1>" }
end
Run Code Online (Sandbox Code Playgroud)

为了在模板和直红宝石中正确地打印出帮助器中的包装内容,我们可以使用concat_content并检查是否需要将结果"连接"到模板或者只是返回它.

 def div_wrapper(&block)
   nested_content = capture_html(&block)
   tag_result = content_tag(:div, nested_content)
   block_is_template?(block) ? concat_content(tag_result) : tag_result
end
Run Code Online (Sandbox Code Playgroud)

我希望这是一个基本的概述.这些功能可以重叠,但一般来说,基于特定的上下文,何时使用它们变得清晰.