如何在Haml中制作动态ID?

use*_*643 73 haml ruby-on-rails

#item
Run Code Online (Sandbox Code Playgroud)

创建一个id ="item"的div

.box#item
Run Code Online (Sandbox Code Playgroud)

使用class ="box"和id ="item"创建一个div

.box#="item "+x
Run Code Online (Sandbox Code Playgroud)

使用class ="box"和注释"#="item"+ x"创建一个div

.box#
  ="item"+x
Run Code Online (Sandbox Code Playgroud)

抛出"非法元素:类和id必须有值."

如何将id设置为变量?

EmF*_*mFi 131

有两种方法:

长格式方式(将id定义为常规属性):

.box{:id => "item_#{x}"}
Run Code Online (Sandbox Code Playgroud)

产生这个(xx.to_s评估的):

<div class="box" id="item_x">
Run Code Online (Sandbox Code Playgroud)

简短形式:

.box[x]
Run Code Online (Sandbox Code Playgroud)

产生以下假设x是一个实例item:

<div class="box item" id="item_45">
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅HAML参考.

  • 我必须删除空格才能使其正常工作:.box {:id =>"item _#{x}"} (2认同)

Dee*_*ale 6

您可以通过以下方式在HAML中设置idclass

  1. 正常方式

    .box.item#item
    
    Run Code Online (Sandbox Code Playgroud)
    <div id="item" class="box item"></div>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 如果需要插值,可以使用此格式

    .box{id: "item_#{123}", class: "item_#{123}"}
    
    Run Code Online (Sandbox Code Playgroud)
    <div id="item_123" class="box item_123"></div>
    
    Run Code Online (Sandbox Code Playgroud)
  3. 此格式使用对象引用生成类和ID

    # app/controllers/items_controller.rb 
    @item = Item.find(123)
    
    Run Code Online (Sandbox Code Playgroud)
    .box[@item]
    
    Run Code Online (Sandbox Code Playgroud)
    <div id="item_123" class="box item"></div>
    
    Run Code Online (Sandbox Code Playgroud)
  4. 如果您需要添加前缀

    .box[@item, :custom]
    
    Run Code Online (Sandbox Code Playgroud)
    .box[@item, :custom]
    
    Run Code Online (Sandbox Code Playgroud)
  5. 如果需要自定义类和ID生成,则需要添加以下方法进行建模。

    class CrazyUser < ActiveRecord::Base
      def haml_object_ref
        "customized_item"
      end
    end
    
    Run Code Online (Sandbox Code Playgroud)

    然后您将获得定制的课程

    .box[@item]
    
    Run Code Online (Sandbox Code Playgroud)
    <div id="custom_item_123" class="box custom_item"></div>
    
    Run Code Online (Sandbox Code Playgroud)

参考: