我的日期部分如下,目前是硬编码的:
#postdate
.grid
.grid__cell.day 15th
.grid__cell.month Jan
.grid__cell.year 2015
但是,有没有办法通过使日期动态来使这个可重用,以便我可以从另一个苗条文件传递日期?
我不确定如何解决此问题,因为您只需添加== slim :'components/_date'
即可渲染部分内容。是否有更好的办法完全做这种事情?
我使用Ruby和sass和sinatra。
谢谢!
答案 0 :(得分:1)
...有没有办法通过使日期动态化来使这个可重用 我可以通过日期......
在sinatra路线中,您可以设置变量,这些变量可在您的超薄模板中访问:
routes.rb中:
require 'sinatra'
require 'slim'
get '/' do
@day = 170000 #****HERE****
slim :index
end
视图/ index.slim:
h2 This is views/index.slim:
div The day is: #{@day} #****HERE****
ul.fruit
li Apples
li Oranges
== slim :'components/_date'
视图/组件/ _date.slim:
#postdate
.grid
.grid__cell.day =@day #****HERE*****
.grid__cell.month Jan
.grid__cell.year 2015
我真的不明白你的意思:
从另一个苗条文件传递日期
你能举例说明你想做什么吗?
对评论的回应:
根据Sinatra faq,How do I render partials?,如果要渲染部分并为partial指定局部变量,则需要安装gem:
$ gem install sinatra-partial
以下是一个示例应用:
~/sinatra_projects$ tree slim_app/
slim_app/
├── models
├── public
│ ├── cool_stuff.html
│ └── imgs
├── routes.rb
└── views
├── components
│ └── _date.slim
├── index.slim
└── layout.slim
routes.rb中:
require 'sinatra'
require 'slim'
#***NEW STUFF:
require 'sinatra/partial'
set :partial_template_engine, :slim
enable :partial_underscores
get '/' do
slim :index
end
视图/组件/ index.slim:
h2 This is views/index.slim:
ul.fruit
li Apples
li Oranges
== partial\
:'components/date',
locals: {day: 1, month: 'Jan', year: 2015}
== partial\
:'components/date',
locals: {day: 25, month: 'Dec', year: 2014}
如果你使用各种模板,erb,haml,slim等,你可以在调用partial()时设置类型:
partial(:"components/date", :template_engine => :slim, :locals => {...})
视图/组件/ _date.slim:
#postdate
.grid
.grid__cell.day =day
.grid__cell.month =month
.grid__cell.year =year
视图/ layout.slim:
doctype html
html
head
meta charset="utf-8"
title Test
body
h1 This is the Layout. Find me in /views/app_layout.slim
== yield
所以,我假设你想做这样的事情:
routes.rb中:
get '/' do
@dates = [
{day: 1, month: 'Jan', year: 2015},
{day: 2, month: 'Feb', year: 2015},
{day: 3, month: 'Mar', year: 2015},
{day: 4, month: 'Apr', year: 2015},
]
slim :index
end
视图/ index.slim:
h2 This is views/index.slim:
ul.fruit
li Apples
li Oranges
- @dates.each do |date|
== partial\
:'components/date',
locals: {day: date[:day], month: date[:month], year: date[:year]}
视图/组件/ _date.slim:
#postdate
.grid
.grid__cell.day =day
.grid__cell.month =month
.grid__cell.year =year
......产生:
1
扬
2015年
2
二月
2015年
3
三月
2015年
4
四月
2015年
答案 1 :(得分:0)
我遇到了类似的问题并设法编写了一个杀手部分助手,它可以为你提供类似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,传递locals是可选的,因为指定部分的不同路径(相对于settings.views
)。
希望你像我一样尽可能多地使用它!