6

コードを正しくインデントするにはどうすればよいですか?

アプリ/ビュー/レイアウト/shared.html.haml:

= render :partial => "shared/head"
= yield
= render :partial => "shared/footer"

アプリ/ビュー/共有/_head.html.haml:

!!!XML
!!!1.1
%html{"xml:lang" => "pl", :xmlns => "http://www.w3.org/1999/xhtml"}
  %head
    %title
      some title
  %body
    .container

アプリ/ビュー/共有/index.html.haml:

%p
  Hello World!

アプリ/ビュー/共有/_footer.html.haml:

.footer
  Some copyright text

レンダリングされた HTML 出力:

<!DOCTYPE html> 
<html xml:lang='pl' xmlns='http://www.w3.org/1999/xhtml'> 
  <head> 
    <title> 
      some title
    </title> 
  </head> 
  <body> 
    <div class='container'></div> 
  </body> 
</html> 
<p> 
  Hello World!
</p> 
<div id='footer'> 
 Some copyright text
</div> 
4

2 に答える 2

5

そのために使用する必要app/views/layoutがありyield、実際のコンテンツは次のとおりです。

アップデート

app/views/layout/shared.html.haml:

!!! 1.1
%html
  = render "shared/head"
  %body
    .container
      = yield
  = render "shared/foot"
于 2010-09-24T21:31:53.747 に答える
1

私はここでのパーティーにかなり遅れているように見えますが、おそらく他の誰かがこれに遭遇し、同じ問題に対処する必要があります (私が今夜行ったように)。

私の場合、HTML の開始タグのセットアップがより複雑で、いくつかの異なるレイアウトがあるため、すべての繰り返しは必要ありませんでした。私の開始 HTML タグには、さまざまな IE バージョンの条件があり、元は次のようになっていました。

- # /app/views/layouts/shared/_head.html.haml

!!! 5
<!--[if lt IE 7 ]> <html lang="en" class="no-js ie ie6"> <![endif]-->
<!--[if IE 7 ]>    <html lang="en" class="no-js ie ie7"> <![endif]-->
<!--[if IE 8 ]>    <html lang="en" class="no-js ie ie8"> <![endif]-->
<!--[if IE 9 ]>    <html lang="en" class="no-js ie ie9"> <![endif]-->
<!--[if (gte IE 9)|!(IE)]><!-->
%html{ 'xml:lang' => 'en', lang: 'en', class: 'no-js'}
  <!--<![endif]-->
  %head
  - # and so on...

私は途中で終了するという同じ問題を抱えていた</html>ので、_head パーシャルから HTML タグを取り除き (head タグをそこに残して)、問題に対処するために次のヘルパーを作成しました。

# /app/helpers/application_helper.rb

module ApplicationHelper
  def render_html_tag(&block)
    markup = capture_haml &block
    haml = Haml::Engine.new <<-HAML
!!! 5
<!--[if lt IE 7 ]> <html lang="en" class="no-js ie ie6"> <![endif]-->
<!--[if IE 7 ]>    <html lang="en" class="no-js ie ie7"> <![endif]-->
<!--[if IE 8 ]>    <html lang="en" class="no-js ie ie8"> <![endif]-->
<!--[if IE 9 ]>    <html lang="en" class="no-js ie ie9"> <![endif]-->
<!--[if (gte IE 9)|!(IE)]><!-->
%html{ 'xml:lang' => 'en', lang: 'en', class: 'no-js'}
  <!--<![endif]-->
  = markup
HAML

    obj = Object.new
    haml.def_method(obj, :render, :markup)
    obj.render(markup: markup)
  end
end

少しごちゃごちゃしており、おそらく少しきれいにすることができますが、主なアイデアは、レイアウトを次のように見せることができる、haml エンジンの #def_methodを利用することです。

- # /app/views/layout/application.html.haml

= render_html_tag do
  = render 'layouts/shared/head'
  %body
    = yield
  = render 'layouts/shared/footer'
于 2012-01-15T07:28:12.307 に答える