2012-07-21 12 views
7

Tengo un parcial de Haml en Sinatra para manejar todos mis elementos de 'página abierta', como metaetiquetas.¿Cómo puedo usar una variable local (o vista) en Sinatra con parciales de Haml?

Me gustaría tener una variable para page_title en este parcial y luego establecer esa variable por vista.

Algo como esto en el parcial:

%title @page_title 

A continuación, en la vista, se le permitiera hacer algo como:

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

He leído un montón de preguntas/postes, etc., pero No sé cómo pedir la solución a lo que estoy tratando de hacer. Vengo de Rails, donde nuestros desarrolladores usualmente usan content_for pero lo configuran todo. Realmente estoy tratando de aprender cómo funciona esto. Parece que tengo que definirlo y usar: locales de alguna manera, pero no lo he descubierto. ¡Gracias de antemano por cualquier consejo!

Respuesta

12

se pasa variables en los parciales HAML Sinatra como esto:

page.haml

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

_header.haml

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

En el caso de un título de página que acabo de hacer algo como esto en mi diseño por cierto:

layout.haml

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

A continuación, establezca el valor de @title en las rutas (con un ayudante para mantenerlo corto).

Pero si su cabecera es una vista parcial a continuación, puede combinar los dos ejemplos como:

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

Muchas gracias fo esto! –

Cuestiones relacionadas