【问题标题】:Tag a from erb to Haml标记 a 从 erb 到 Haml
【发布时间】:2015-10-13 07:05:51
【问题描述】:

我在 haml 中有下一个代码,显示错误:Showing /home/ubuntu/workspace/app/views/layouts/application.html.haml where line #24 raise: Illegal nesting: content can't be both与 %a 位于同一行并嵌套在其中。

第 24 行是 = current_user.name haml代码有什么问题?

!!!
%html
  %head
    %title Chat
    = stylesheet_link_tag
    = javascript_include_tag
    = csrf_meta_tags

  %body
    %div.navbar.navbar-default.navbar-static-top
      .container   
        .navbar-header
          = link_to 'Chat', root_path, class: 'navbar-brand'

      .navbar
        %ul.nav.navbar-nav
          %li
            = link_to 'Home', root_path

        %ul.nav.navbar-nav.pull-right
          - if user_signed_in?
            %li.dropdown
              %a.dropdown-toggle {"data-toggle": "dropdown", href: "#"}
                = current_user.name    
              %ul.dropdown-menu {role: "menu">
                %li
                  = link_to 'Profile', edit_user_registration_path
                %li 
                  = link_to 'Log out', destroy_user_session_path, method: :delete
          - else
            %li
              = link_to 'Log In', new_user_session_path
            %li
              = link_to 'Sign Up', new_user_registration_path


    .container
      = flash.each do |key, value|
        %div.alert.alert-"#{key}"
          = value

      = yield

  %footer  
    %p Copyright © #{Time.now.year}

【问题讨论】:

    标签: ruby-on-rails haml


    【解决方案1】:

    尝试以下方法:

    %a.dropdown-toggle{data-toggle: "dropdown", href: "#"} = current_user.name
    

    或者,您应该调用 Rails 的 link_to 助手以使其正常工作:

    = link_to current_user.name, "#", data: {toggle: "dropdown"}, class: "dropdown-toggle"
    

    与 %a 位于同一行并嵌套在其中

    该错误基本上意味着 HAML 将您在 .dropdown-toggle{ 之间的空间视为链接标签的“内容”。

    当您随后在下面的行中声明= current_user 时,对于在链接的“内容”中显示哪个感到困惑


    关于您的错误,这是我将如何格式化页面:

    !!!
    %html
      %head
        %title Chat
        = stylesheet_link_tag
        = javascript_include_tag
        = csrf_meta_tags
    
      %body
        .navbar.navbar-default.navbar-static-top
          .container   
            .navbar-header
              = link_to 'Chat', root_path, class: 'navbar-brand'
    
          .navbar
            %ul.nav.navbar-nav
               %li= link_to 'Home', root_path
    
            %ul.nav.navbar-nav.pull-right
              - if user_signed_in?
                %li.dropdown
                  = link_to current_user.name, "#", data: {toggle: "dropdown"}, class: "dropdown-toggle"
                  %ul.dropdown-menu{data-role: "menu"}
                     %li= link_to 'Profile', edit_user_registration_path
                     %li= link_to 'Log out', destroy_user_session_path, method: :delete
              - else
                %li= link_to 'Log In', new_user_session_path
                %li= link_to 'Sign Up', new_user_registration_path
    
    
        .container
          = flash.each do |key, value|
            .alert.alert-"#{key}" = value
          = yield
    
      %footer  
        %p Copyright © #{Time.now.year}
    

    一些提示:

    1. 您无需声明%div - 只需使用.css_class,它会自动创建div

    2. HAML 基本上就像一个巨大的markdown 脚本——它以不同的方式处理代码中的每一个细微差别。对于 inlinenested 内容尤其如此。

    如果你只有一行,你不需要嵌套内容

    .alert.alert-"#{key}"= value
    

    如果你有多行,你需要保持你的初始代码没有空格:

    %ul.dropdown-menu{data-role: "menu"}
       = #this can be nested
    

    【讨论】:

    • i chaged to = link_to current_user.name....,现在显示错误:第 25 行出现:非法嵌套:内容不能与 % 在同一行ul 并嵌套在其中。
    • %ul.dropdown-menu {role: "menu"> 应该是 %ul.dropdown-menu {role: "menu"}
    • 已更改,但再次出现错误:非法嵌套:内容不能与 %ul 位于同一行并嵌套在其中。第 25 行
    【解决方案2】:

    将第 23 行更改为

    %a.dropdown-toggle{"data-toggle": "dropdown", href: "#"}
    

    【讨论】:

    • 已更改,但同样的错误。我通过添加完整文件 application.html.haml 来更新我的问题
    • 删除 "dropdown-toggle" 和 "{"data-toggle": "dropdown", href: "#"}" 之间的空格
    • 谢谢。现在在线显示错误 - = flash.each do |key, value| %div.alert.alert-"#{key}" = value 非法嵌套:内容不能与 %div 位于同一行并嵌套在其中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-20
    相关资源
    最近更新 更多