Dan*_*ney 7 haml scope sinatra
我在Sinatra有一个Haml部分处理我所有的'页面打开'项目,如元标记.
我希望在此部分中为page_title设置变量,然后在每个视图中设置该变量.
部分内容如下:
%title @page_title
Run Code Online (Sandbox Code Playgroud)
然后在视图中,允许执行以下操作:
@page_title = "This is the page title, BOOM!"
Run Code Online (Sandbox Code Playgroud)
我已经阅读了很多问题/帖子等等,但我不知道如何要求解决我想要做的事情.我来自Rails,我们的开发人员通常使用content_for,但他们设置了所有这些.我真的想知道它是如何工作的.似乎我必须定义它并使用:本地人以某种方式,但我还没弄明白.提前感谢您的任何提示!
rob*_*omc 12
你将变量传递给Sinatra haml partials,如下所示:
page.haml
!!!
%html{:lang => 'eng'}
%body
= haml :'_header', :locals => {:title => "BOOM!"}
Run Code Online (Sandbox Code Playgroud)
_header.haml
%head
%meta{:charset => 'utf-8'}
%title= locals[:title]
Run Code Online (Sandbox Code Playgroud)
在页面标题的情况下,我只是在我的布局btw做这样的事情:
layout.haml
%title= @title || 'hardcoded title default'
Run Code Online (Sandbox Code Playgroud)
然后在路由中设置@title的值(使用帮助程序保持简短).
但是如果您的标题是部分标题,那么您可以将两个示例结合起来:
layout.haml
!!!
%html{:lang => 'eng'}
%body
= haml :'_header', :locals => {:title => @title}
Run Code Online (Sandbox Code Playgroud)
_header.haml
%head
%meta{:charset => 'utf-8'}
%title= locals[:title]
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)