在Haml中构建布局模板

Phi*_*lip 16 ruby haml

我有一个使用Haml进行布局的网页.有一个单独的布局文件(layout.haml),在渲染任何实际的haml页面时使用.layout.haml看起来像

-# layout.haml
!!! XML
!!!
%html
  %head
    ...
  %body
    ...
    #content= yield
Run Code Online (Sandbox Code Playgroud)

问题:这当然已经在文档中了,<body>因此在标题中操作事物是不可能的.例如<title>改变通过@title.什么是更多的问题是每个页面特定的Javascript需要在正文中加载.而且layout.haml已经包含Javascript,因此jQuery通常被多次实例化.

有关更好的模板结构的任何建议吗?

tjw*_*ace 44

此解决方案仅适用于Ruby on Rails:

您可以使用yield(:location)content_for(:location)方法,更多信息.

layout.haml

!!!
%html
  %head
    %title= yield(:title)
    = yield(:head)
  %body
    = yield
Run Code Online (Sandbox Code Playgroud)

view.haml

- content_for(:title, 'My title')
- content_for(:head) do
  = javascript_include_tag :foo

%h1 My view!
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这是一个特定于Rails的解决方案. (15认同)

kfl*_*l62 6

我使用偏见:

!!!
%html
  = partial('trst_sys/shared/html-head')

  %body{:id => "srv",:'data-lang' => current_lang}
  #main.wrap
    %header#header
      = partial('trst_sys/shared/header')
    %nav#menu
      = partial('trst_sys/shared/menu')
    %section#content
      %article#xhr_content
        = yield
      %article#xhr_msg.hidden
    %section#sidebar
      = partial('trst_sys/shared/sidebar')
    %section#main_footer.wrap
  %footer#footer.wrap
    = partial('trst_sys/shared/footer')
Run Code Online (Sandbox Code Playgroud)