7

Sinatra には Haml パーシャルがあり、メタ タグなどの「ページを開く」アイテムをすべて処理します。

このパーシャルに page_title の変数を用意して、その変数をビューごとに設定したいと思います。

部分的に次のようなもの:

%title @page_title

次に、ビューで、次のようなことを許可されます。

@page_title = "This is the page title, BOOM!"

たくさんの質問や投稿などを読みましたが、自分がやろうとしていることに対する解決策を求める方法がわかりません。私は開発者が通常 content_for を使用していた Rails から来ていますが、それらはすべてセットアップされています。私は本当にこれがどのように機能するかを学ぼうとしています。それを定義して :locals を何らかの方法で使用する必要があるようですが、私はそれを理解していません。ヒントをお寄せいただきありがとうございます。

4

1 に答える 1

12

次のように変数を Sinatra haml パーシャルに渡します。

page.haml

!!!
%html{:lang => 'eng'}
    %body
        = haml :'_header', :locals => {:title => "BOOM!"}

_header.haml

   %head
       %meta{:charset => 'utf-8'}
       %title= locals[:title]

ページタイトルの場合、レイアウトで次のようにします:

レイアウト.haml

%title= @title || 'hardcoded title default'

次に @title の値をルートに設定します (ヘルパーを使用して短くします)。

ただし、ヘッダーが部分的な場合は、次のように 2 つの例を組み合わせることができます。

レイアウト.haml

!!!
%html{:lang => 'eng'}
    %body
        = haml :'_header', :locals => {:title => @title}

_header.haml

   %head
       %meta{:charset => 'utf-8'}
       %title= locals[:title]

app.rb

helpers do
  def title(str = nil)
    # helper for formatting your title string
    if str
      str + ' | Site'
    else
      'Site'
    end
  end
end


get '/somepage/:thing' do
  # declare it in a route
  @title = title(params[:thing])
end
于 2012-07-21T11:17:21.260 に答える