我有一個簡單的sinatra應用程序,它使用haml和sass作爲視圖。其中一個視圖(位於視圖文件夾中)是我的導航菜單的一部分。我試圖從index.haml使其但我得到以下錯誤:錯誤的參數數目(1 2)如何渲染sinatra視圖中的部分(haml in haml)?
我想在index.haml以下行以使其
.navigation
= render :partial => "nav"
我有一個簡單的sinatra應用程序,它使用haml和sass作爲視圖。其中一個視圖(位於視圖文件夾中)是我的導航菜單的一部分。我試圖從index.haml使其但我得到以下錯誤:錯誤的參數數目(1 2)如何渲染sinatra視圖中的部分(haml in haml)?
我想在index.haml以下行以使其
.navigation
= render :partial => "nav"
編輯:!!! OUTDATED !!!閱讀下面Jason's的答案!
你想在rails
工作! Sinatra
沒有partial
方法。的partial
上Sinatra
的實現看起來像 this (source gist)從GitHub:
module Haml
module Helpers
def partial(template, *args)
template_array = template.to_s.split('/')
template = template_array[0..-2].join('/') + "/_#{template_array[-1]}"
options = args.last.is_a?(Hash) ? args.pop : {}
options.merge!(:layout => false)
if collection = options.delete(:collection) then
collection.inject([]) do |buffer, member|
buffer << haml(:"#{template}", options.merge(:layout =>
false, :locals => {template_array[-1].to_sym => member}))
end.join("\n")
else
haml(:"#{template}", options)
end
end
end
end
包括這種方法,你可以調用你的.haml
文件partial
,像
= partial("partial_name")
如果你想render
視圖中的其他查看語法是
= render(:haml,:'rel_path_to_view',:locals => {:optional => option})
注意語法差異和sinatra
關於render
方法!
我真的不明白爲什麼有人會下降投一個明顯過時的答案。當時這是正確的。 LoL無所謂:) – kfl62 2013-04-20 14:22:56
由於我看到人們仍然鏈接到這個答案,我從主要代碼中取得了代碼,並將它編入了一個gem,其中[Lenary](https://github.com/lenary)(the原作的作者)也自此作出了貢獻。它有後續的改進和規格等https://rubygems.org/gems/sinatra-partial。 – iain 2013-05-07 11:40:04
我認爲最好是被拒絕投票,以便在上面列出更好的答案。那麼,我知道實際上不應該這樣做,但相反,SO應該有一個功能來處理過時的答案。 – 2014-09-02 14:30:05
或者你可以這樣做:
helpers do
def partial(page, options={})
haml page.to_sym, options.merge!(:layout => false)
end
end
,包括你的局部有:
= partial("something-rad")
這裏是我如何做到這一點(更簡單地比@ kfl62的回答,功能更豐富,比@ JM3的答案):
module Partials
def partial(page, variables={})
haml page.to_sym, {layout:false}, variables
end
end
helpers Partials
用它在你的Haml的文件裏柯:
%ul#comments
- @comments.each do |comment|
%li= partial :comment, comment:comment
我知道這是*令人難以置信的*舊Phrogz,但我想指出......「haml page.to_sym,{layout:false},變量」應該可能是 「haml page.to_sym,{:layout = > false},變量「 – user766987 2011-07-13 02:24:02
@ user766987你說什麼適用於舊的1.8和1。9;我的答案是使用Ruby 1.9語法。 – Phrogz 2011-07-13 02:42:20
永遠向你學習Phrogz,謝謝! :) – user766987 2011-07-13 18:32:13
你可以使用Sinatra的HAML功能:
= haml :nav
在代碼清潔方面,這勝過所有其他解決方案。 – Henson 2013-03-12 15:12:30
這是迄今爲止最好的答案。你不需要任何特殊的代碼,它是內置的! – 2013-05-06 21:17:18
如果您已將它設置爲正確使用紅地毯,您可以使用'= markdown:README' – 2014-08-06 21:34:36
如果你想要更多的答案,我建議加上'ruby'到標籤 – kfl62 2010-10-20 07:59:31