質問

私は読む 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' メインテンプレートファイルを小さなチャンクに分解するだけです。

それを進めるための正しい方法はありますか?そして、いつ/どこで他のヘルパー関数を使用したいですか?

役に立ちましたか?

解決

ユースケースを見てみましょう。

  1. content_for/hired_content

これは、コンテンツをレイアウトファイルに注入するためのものです。例は、別のテンプレートからレイアウトにCSS/スクリプトを追加することです。ガイドの例は同じで、必要なテンプレートからレイアウトにCSSファイルを追加する方法を示しています。また、コンテンツをサイドバー、追加のリンクなどに追加するために使用することもできます。これは、独自のテンプレートを必要としないが、表示されているビューに基づいてレイアウトに情報を渡す必要があるもののためです。

  1. レンダリング/部分的

レンダリングは、ルートに関連付けられた特定のテンプレートを表示するためのものです。ルートが処理された後、メインアクションにレンダリングを使用する必要があります。部分的なのは、ビューの「メソッド」のようなものです。再利用することができ、変数を渡して出力を変更できます。メインテンプレートの部分的なものを使用して、コードを分割して、そうでなければ冗長に見えるかもしれないビューの再利用を再利用します。

  1. Capture_html/concat_content

これは通常、コンテンツのブロックを取得する独自のヘルパーを作成するために使用されます。たとえば、ハムルブロックを取り、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

これを実装してテンプレートで使用するには、プロセスのためにブロックに渡されたハムを「キャプチャ」してから、その周りにdivを包むことができる必要があります。これは、capture_htmlが入る場所です。

def div_wrapper(&block)
   nested_content = capture_html(&block)
   content_tag(:div, nested_content)
end

これにより、コンテンツが取り込まれ、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

しかし、それは他のヘルパーでも機能します:

# some_helper.rb
def example(name)
  div_wrapper { "<h1>Test</h1>" }
end

テンプレートとストレートRubyの両方でヘルパーからラップされたコンテンツを適切に印刷するために、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

これが基本的な概要として機能することを願っています。関数は重複する可能性がありますが、一般に、特定のコンテキストに基づいていつ使用するかが明らかになります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top