包括部分模板

时间:2010-02-24 10:22:17

标签: sinatra haml partials

在sinatra的应用程序中,

require 'rubygems'
require 'sinatra'
require 'haml'

get '/new' do
  haml :new
end

get '/edit' do
  haml :edit
end

__END__

@@ layout
%html
  %head
    %title
  %body
  = yield

@@ _form
# partial form

@@ new
%h1 Add a new item
# require partial _form

@@ edit
%h1 Edit an existing item
# require partial _form

如何在@@ _form@@ new中要求部分@@ edit模板?

谢谢。

3 个答案:

答案 0 :(得分:3)

你有没有看过这个:http://www.sinatrarb.com/faq.html#partials

我创建了app_helpers.rb并在我的主应用文件中需要它。 app_helpers包含此方法:

  def partial(template, *args)
    options = args.last.is_a?(Hash) ? args.pop : { }
    options.merge!(:layout => false)
    if collection = options.delete(:collection) then
        haml_concat(collection.inject([]) do |buffer, member|
          buffer << haml(template, options.merge(
                                  :layout => false,
                                  :locals => {template.to_sym => member}
                                )
                     )
      end.join("\n"))
    else
      haml_concat(haml(template, options))
    end

在我的观点中,我使用:

- partial :file

答案 1 :(得分:1)

我会推荐Sinatra-Partial插件:https://github.com/yb66/Sinatra-Partial

在您的代码中,您只需要:安装gem'gem install sinatra-partial'

在代码中需要部分:'require'sinatra / partial'

按以下方式更改您的代码:

@@ new
%h1 Add a new item
= partial '_form'

@@ edit
%h1 Edit an existing item
= partial '_form'

如果要在_form partial中添加一些参数,可以使用locals传递它:

= partial '_form', locals: { param: @param }

答案 2 :(得分:1)

如果您正在使用sinatra,为什么不使用它的内置haml方法,如下所示:

= haml :partial_form, layout: false

在rails中:

= render 'partial_form'