我有一个简单的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