Указание макета и шаблона в автономном (не рельсовом) приложении ruby, используя slim или haml - PullRequest
10 голосов
/ 14 августа 2011

Я пытаюсь сделать что-то подобное в автономном (не рельсовом) приложении:

layout.slim:

h1 Hello
.content
  = yield

show.slim:

= object.name
= object.description

Я не могу понять, как указать макет и шаблон. Это возможно с тонким (или хамлом)? Спасибо.

1 Ответ

19 голосов
/ 15 августа 2011

Файл layout.slim выглядит следующим образом:

h1 Hello
.content
  == yield

Файл contents.slim выглядит так:

= name

Это может быть сокращено, но я разделился на отдельные шаги для объяснения.

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 }

Будет выведено:

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