Включить тонкий файл в другой тонкий файл
Я работаю над статическим веб-сайтом (поэтому никакой реальной поддержки сервера), и я хотел бы включить небольшой тонкий фрагмент в другой, возможно передавая ему переменную.
Это возможно? В рельсах довольно легко, хотя render
метод, но я понятия не имею, как это сделать на стройной (очевидно, load
метод не работает для худых).
4 ответа
Похоже, это можно сделать следующим образом:
Slim::Template.new('template.slim', optional_option_hash).render(scope)
Находится в тонком readme: https://github.com/slim-template/slim
Slim содержит Include
Плагин, который позволяет включать другие файлы непосредственно в файлы шаблона во время компиляции:
require 'slim/include'
include partial_name
Документация доступна здесь: https://github.com/slim-template/slim/blob/master/doc/include.md
Если вам нужно включить файлы во время выполнения
Slim::Template.new("#{ name }.slim").render
выполняет работу ( https://github.com/slim-template/slim).
Я настоятельно рекомендую проверить Middleman, если вы хотите создать статический сайт с использованием Slim. Посредник заимствует общие вспомогательные функции, такие как render
а также partial
от Padrino, веб-фреймворк, похожий на Rails, но построенный с использованием более легкого Sinatra (все это отличное программное обеспечение).
Суть в том, что вы можете настроить Middleman так, чтобы он использовал slim, а затем произвольно вкладывал части (или макеты). Если вы столкнулись с ошибками, проверьте поток переполнения стека. Это довольно просто, хотя!
Документы Middleman объясняют, как использовать партиалы, и вы можете увидеть, как пример из реальной жизни выглядит в моей сути для встраивания проигрывателя видео HTML5.
Этот поток помог мне написать действительно убойный помощник по партиалам, который дает вам функциональность, подобную Rails-подобным. Я действительно доволен этим!
#partials_helper.rb
module PartialsHelper
def partial(name, path: '/partials', locals: {})
Slim::Template.new("#{settings.views}#{path}/#{name}.slim").render(self, locals)
end
end
-
#app.rb
require 'slim'
require 'slim/include'
require 'partials_helper'
require 'other_helper_methods'
class App < Sinatra::Base
helpers do
include PartialsHelper
include OtherHelperMethods
end
get '/' do
slim :home
end
end
-
#views/home.slim
== partial :_hello_world, locals: { name: 'Andrew' }
-
#views/partials/_hello_world.slim
h1 Hello, World! Hello #{name}!
У меня изначально было только .render({}, locals)
Это означало, что у партиалов не было доступа ни к каким вспомогательным методам, содержащимся внутри OtherHelperMethods
(но home.slim
сделал). Переходя self
в .render
в качестве первого аргумента исправляет это (если вам интересно, посмотрите Tilt::Template #render
документация.
С этим PartialsHelper, передача локальных данных является необязательной, так как указывает другой путь к частичному (относительно settings.views
).
Надеюсь, вы получите от этого столько же пользы, сколько и я!