2012-07-21 16 views
7

Sinatra'da meta etiketleri gibi tüm 'sayfa açık' öğelerini işlemek için bir Haml kısmi var.Haml partials ile Sinatra'da yerel (veya bakış açısı) bir değişkeni nasıl kullanabilirim?

Bu kısmi sayfada page_title için bir değişkene sahip olmayı ve ardından görünüm başına bu değişkeni ayarlamayı çok isterim. Kısmi böyle

şey: Ben vb sorular/mesajların, çok okudum ama var

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

: görünümünde Sonra

%title @page_title 

, böyle bir şey yapmak için izin Yapmaya çalıştığım şeyin çözümünü nasıl soracağımı bilmiyorum. Rails'lerden geliyorum, burada devlerimiz content_for'ları kullandılar ama hepsini bu şekilde ayarladılar. Bunun nasıl çalıştığını gerçekten öğrenmeye çalışıyorum. Onu tanımlamak ve kullanmak zorundayım gibi görünüyor: Yerliler bir şekilde ama ben bunu çözemedim. Her türlü ipucu için şimdiden teşekkür ederiz!

cevap

12

Böyle Sinatra haml partials içine değişkenleri geçmesi: Bir sayfa başlığı durumunda

page.haml

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

_header.haml

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

Sadece böyle bir şey yapmak bu benim düzenimdeki btw:

layout.haml

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

Daha sonra rotalarda @ yazının değerini ayarlayın (yardımcı olmak için bir yardımcı ile kısa tutun).

Ama başlık kısmi ise o zaman birleştirebilirsiniz iki örnek gibi:

layout.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 
+1

Çok teşekkür ederim, çok Bu r! –

İlgili konular