如何在Haml中制作动态ID?


74
#item

用id =“ item”创建一个div

.box#item

用class =“ box”和id =“ item”创建一个div

.box#="item "+x

用class =“ box”和注释'#=“ item” + x'创建一个div

.box#
  ="item"+x

抛出“非法元素:类和ID必须具有值。”

如何将ID设置为变量?

Answers:


134

有两种方法:

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

.box{:id => "item_#{x}"}

产生此结果(x就是x.to_s评估结果):

<div class="box" id="item_x">

简写方式:

.box[x]

产生以下假设x是的实例item

<div class="box item" id="item_45">

有关更多信息,请参见HAML参考


2
我必须删除空白才能使其正常工作:.box {:id =>“ item _#{x}”}
jethroo 2013年

如何在快捷方式中连接字符串和字符串转换变量?我尝试过.box["item" + s],但没有成功。使用方括号的快捷方式仅与变量兼容吗?
ahnbizcad 2014年

1
@gwho快捷方式方法要求x为item的实例。使用长形式的字符串插值形式来实现您想要的功能。.box {:id =>“ item#{s}”}}
EmFi's 2014年

6

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

  1. 正常方式

    .box.item#item
    
    <div id="item" class="box item"></div>
    
  2. 如果需要插值,可以使用此格式

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

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

    .box[@item, :custom]
    
    <div id="custom_item_123" class="box custom_item"></div>
    
  5. 如果需要自定义类和ID生成,则需要添加以下方法进行建模。

    class CrazyUser < ActiveRecord::Base
      def haml_object_ref
        "customized_item"
      end
    end
    

    然后您将获得定制的课程

    .box[@item]
    
    <div id="customized_item_123" class="box customized_item"></div>
    

参考:

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.