2012-07-21 26 views
7

Tôi có một phần Haml trong Sinatra để xử lý tất cả các mục 'mở trang' của tôi như thẻ meta.Làm cách nào để sử dụng biến cục bộ (hoặc mỗi lần xem) trong Sinatra với phần tử Haml?

Tôi rất muốn có biến cho page_title trong phần này và sau đó đặt biến đó cho mỗi lượt xem.

Something như thế này trong phần:

%title @page_title 

Sau đó, trong giao diện, được phép làm điều gì đó như:

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

Tôi đã đọc rất nhiều câu hỏi/bài viết, vv nhưng Tôi không biết cách yêu cầu giải pháp cho những gì tôi đang cố gắng làm. Tôi đến từ Rails nơi các nhà phát triển của chúng tôi thường sử dụng content_for nhưng họ đã thiết lập tất cả mọi thứ. Tôi thực sự đang cố gắng tìm hiểu cách thức hoạt động của nó. Có vẻ như tôi phải định nghĩa nó và sử dụng: người dân địa phương theo một cách nào đó nhưng tôi đã không tìm ra nó. Cảm ơn bạn trước vì bất kỳ lời khuyên nào!

Trả lời

12

Bạn vượt qua biến thành partials Haml Sinatra như thế này:

page.haml

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

_header.haml

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

Trong trường hợp của một tiêu đề trang Tôi chỉ làm điều gì đó như điều này trong bố cục của tôi btw:

layout.haml

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

Sau đó đặt giá trị của @title trong các tuyến đường (có trình trợ giúp để giữ ngắn).

Nhưng nếu tiêu đề của bạn là một phần sau đó bạn có thể kết hợp hai ví dụ như:

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

Cảm ơn bạn rất, rất nhiều r này! –

Các vấn đề liên quan