2012-05-22 25 views
2

我希望能夠在自己包含haml的Sinatra HAML模板中創建模板函數。有沒有辦法做到這一點或類似的東西?如果它也可以使用降價,它會很酷。在Sinatra中使用HAML的模板函數

foo.haml

def foo(x) 
    %h2 something 
    %p something about #{x} 

%h1 Herp de derp 
= foo("mary") 
= foo("us") 

乾杯!

回答

1

功能很接近,你真正需要的是所謂的部分。這些是可以放置在其他視圖內的預定義模板。例如,您可能有評論部分顯示評論的作者,時間戳,內容等。然後,您可以爲特定帖子上的每條評論呈現此部分。

從本質上講,你會用下列

# _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" } 
+1

我知道泛音和正在使用他們現在解決了問題,但我確實在尋找文件中可以做的事情,以避免產生大量文件。我發現一個可能的解決方案是content_for,但我一直無法使它工作。 –

2

實際上結束了,你可以做這樣的事情:

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

是的,我也發現了helper函數,但是我希望它們在haml文件中被_defined定義。雖然謝謝! –

相關問題