【发布时间】:2012-05-30 09:10:45
【问题描述】:
我希望能够在 Sinatra HAML 模板中创建模板函数,这些模板本身包含 haml。有没有办法做到这一点或类似的事情?如果它也可以与 markdown 一起使用,那就太酷了。
foo.haml
def foo(x)
%h2 something
%p something about #{x}
%h1 Herp de derp
= foo("mary")
= foo("us")
干杯!
【问题讨论】:
我希望能够在 Sinatra HAML 模板中创建模板函数,这些模板本身包含 haml。有没有办法做到这一点或类似的事情?如果它也可以与 markdown 一起使用,那就太酷了。
foo.haml
def foo(x)
%h2 something
%p something about #{x}
%h1 Herp de derp
= foo("mary")
= foo("us")
干杯!
【问题讨论】:
其实你可以这样做:
# app.rb
require 'sinatra'
require 'haml'
helpers do
def foo(name)
haml = <<-HAML
#hello_block
Hello, #{name}
HAML
engine = Haml::Engine.new(haml)
engine.render
end
end
get '/' do
haml :index
end
# index.haml
= foo 'World'
【讨论】:
功能很接近,你真正需要的是所谓的partial。这些是您可以放置在其他视图中的预定义模板。例如,您可能有一个 comment partial 来显示评论的作者、时间戳、内容等。然后您可以为特定帖子上的每个 cmets 呈现此部分。
基本上,你会得到以下结果
# _foo.haml.erb
%h2 somthing
%p= x
# index.haml.erb
%h1 Herp de derp
= render :partial => "foo", :locals => { :x => "mary" }
= render :partial => "foo", :locals => { :x => "us" }
【讨论】: