【问题标题】:Template functions with HAML in SinatraSinatra 中带有 HAML 的模板函数
【发布时间】: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")

干杯!

【问题讨论】:

    标签: ruby sinatra haml


    【解决方案1】:

    其实你可以这样做:

    # 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'    
    

    【讨论】:

    • 是的,我也找到了辅助函数,但我还是希望它们 haml 文件中定义。不过谢谢!
    【解决方案2】:

    功能很接近,你真正需要的是所谓的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" }
    

    【讨论】:

    • 我知道部分文件,并且现在正在使用它们来解决问题,但我真的在寻找我可以在此处的文件中执行的操作以避免有大量文件。我发现的一个潜在解决方案是 content_for,但我一直无法让它发挥作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多