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>
Gracias! Me acerqué bastante a los documentos, pero estaba confundido sobre el alcance. También tuve que hacer '== yield' en lugar de' = yield' – chrismealy
Oh sí, lo siento, Slim escapa HTML de forma predeterminada. Actualicé el código. – stonean
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