Как мне сделать динамические идентификаторы в Haml? - PullRequest
72 голосов
/ 07 февраля 2010
#item

создает div с id = "item"

.box#item

создает div с class = "box" и id = "item"

.box#="item "+x

создает div с class = "box" и комментарием '# = "item" + x'

.box#
  ="item"+x

выдает «Недопустимый элемент: классы и идентификаторы должны иметь значения».

Как мне установить id для переменной?

Ответы [ 2 ]

129 голосов
/ 07 февраля 2010

Есть два способа:

Длинный путь формы (определите идентификатор, как если бы он был обычным атрибутом):

.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 .

5 голосов
/ 30 мая 2018

Вы можете установить id и class в HAML следующими способами

  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. Этот формат генерирует класс и идентификатор, используя ссылку на объект

    # 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. Если вам нужен пользовательский класс и генерация идентификатора, вам нужно добавить в модель следующий метод.

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

    И тогда вы получите настроенный класс

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

См .:

...