如何在sinatra视图中渲染部分(haml中的haml)?
我有一个简单的sinatra应用程序,使用haml和sass的视图。 其中一个视图(位于视图文件夹中)是导航菜单的一部分。 我试图从index.haml渲染它,但我得到以下错误:错误的参数数量(1为2)
我试图用index.haml中的以下行渲染它
.navigation = render :partial => "nav"
编辑:!!! 过时!!! 阅读杰森的答案如下!
你在尝试在rails
工作的是什么! Sinatra
没有partial
方法。 Sinatra
上的partial
实现从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})
注意rails
和sinatra
之间关于render
方法的语法差异!
你可以使用Sinatra的haml函数:
= haml :nav
或者你可以这样做:
helpers do def partial(page, options={}) haml page.to_sym, options.merge!(:layout => false) end end
包括你的部分:
= partial( "something-rad" )
这是我的方式(比@ kfl62的答案更简单,比@ jm3的答案更丰富function):
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