7

我在 Sinatra 中有一个 Haml 部分来处理我的所有“页面打开”项目,如元标记。

我希望在这个部分中有一个 page_title 的变量,然后为每个视图设置该变量。

部分是这样的:

%title @page_title

然后在视图中,允许执行以下操作:

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

我已经阅读了很多问题/帖子等,但我不知道如何为我正在尝试做的事情寻求解决方案。我来自 Rails,我们的开发人员通常使用 content_for,但他们设置了所有这些。我真的很想了解这是如何工作的。似乎我必须定义它并以某种方式使用 :locals 但我还没有弄清楚。提前感谢您的任何提示!

4

1 回答 1

12

您将变量传递到 Sinatra haml 部分,如下所示:

页面.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 的值(使用帮助器保持简短)。

但是,如果您的标题是部分的,那么您可以将这两个示例结合起来,例如:

布局.haml

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

_header.haml

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

应用程序.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 回答