2011-08-14 13 views

Respuesta

18

El archivo layout.slim parece:

h1 Hello 
.content 
    == yield 

El archivo contents.slim parece:

= name 

Esto puede ser acortado, pero separada de medidas individuales para fines de explicación.

require 'slim' 

# Simple class to represent an environment 
class Env 
    attr_accessor :name 
end 

# Intialize it 
env = Env.new 
# Set the variable we reference in contents.slim 
env.name = "test this layout" 

# Read the layout file in as a string 
layout = File.open("layout.slim", "rb").read 

# Read the contents file in as a string 
contents = File.open("contents.slim", "rb").read 

# Create new template object with the layout 
l = Slim::Template.new { layout } 

# Render the contents passing in the environment: env 
# so that it can resolve: = name 
c = Slim::Template.new { contents }.render(env) 

# Render the layout passing it the rendered contents 
# as the block. This is what yield in layout.slim will get 
puts l.render{ c } 

Esta es la salida:

<h1>Hello</h1><div class="content">test this layout</div> 
+0

Gracias! Me acerqué bastante a los documentos, pero estaba confundido sobre el alcance. También tuve que hacer '== yield' en lugar de' = yield' – chrismealy

+0

Oh sí, lo siento, Slim escapa HTML de forma predeterminada. Actualicé el código. – stonean

+1

Use 'File.read (" layout.slim ")' en lugar de 'File.open (" contents.slim "," rb "). Read'. Este último se basa en el GC/finalizador para cerrar el archivo que puede o no ocurrir cada vez que. – apeiros

Cuestiones relacionadas