Шаблоны _foo.mustache.haml

Я хотел бы использовать один шаблон haml/mustache, например:

.foo
  %h2 {{title}}

Что я могу сделать двумя способами:

1) Как партиал и передача хеша:

render :partial => 'foo', :mustache => {:title => 'hello world'}
=>
<div class='foo'><h2>hello world</h2></div>

2) Как партиал без хэша для использования внутри тега скрипта:

:javascript
  render :partial => 'foo'
=>
<script type='text/javascript'>
  <div class='foo'><h2>{{title}}</h2></div>
</script>

Я пробовал различные комбинации имен файлов... "_foo.mustache.haml", например, однако рельсы не распознают это расширение.

Кроме того, я использую mustache_template_handler.rb от Райана Бейтса: http://railscasts.com/episodes/295-sharing-mustache-templates


person jsharpe    schedule 10.01.2012    source источник


Ответы (1)


Итак, это работает, но это не настоящая цепочка шаблонов (возможно ли это?!)

module MustacheTemplateHandler
  def self.call(template)
    haml = "Haml::Engine.new(#{template.source.inspect}).render"
    if template.locals.include? :mustache
      "Mustache.render(#{haml}, mustache).html_safe"
    else
      haml.html_safe
    end
  end
end
ActionView::Template.register_template_handler(:mustache, MustacheTemplateHandler)
person jsharpe    schedule 10.01.2012
comment
так это работает только для _foo.html.mustache ? не для _foo.html.mustache.haml ? - person Cristian; 08.05.2012
comment
Кроме того, как я могу получить доступ к помощникам в рельсах, таким как link_to, image_tag и другим определенным помощникам? - person Cristian; 08.05.2012
comment
Спасибо за это решение, оно работает, хотя и очень ограничено. Ребята, вы знаете, как обработчик цепи? так что *.mustache.haml действительно будет работать. - person Mike Bevz; 16.07.2012
comment
еще одна большая проблема - как использовать партиалы. = render не работает, а {{›partial_name}} возвращает, что файл не найден, хотя я перепробовал все возможные комбинации пути/имени. - person Mike Bevz; 16.07.2012
comment
если вы измените эту строку: haml = "Haml::Engine.new(#{template.source.inspect}).render" на haml = "Haml::Engine.new(#{template.source.inspect}).render(self)" разрешает доступ к хелперам rails! Я не совсем понимаю, почему это работает, но это работает... - person Cristian; 23.11.2012