Як зробити динамічні ідентифікатори в Haml?


74
#item

створює div з id = "item"

.box#item

створює div з class = "box" та id = "item"

.box#="item "+x

створює div із class = "box" та коментарем '# = "item" + x'

.box#
  ="item"+x

викидає "Заборонений елемент: класи та ідентифікатори повинні мати значення."

Як мені встановити ідентифікатор змінною?

Відповіді:


134

Є два шляхи:

Шлях у довгій формі (визначте ідентифікатор так, ніби це звичайний атрибут):

.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

як об'єднати рядок і перетворену в рядки змінну в методі ярликів? Я пробував .box["item" + s]і варіанти без успіху. Чи сумісний цей спосіб використання квадратних дужок лише зі змінними?
ahnbizcad 02

1
@gwho для методу ярлика вимагає, щоб x був екземпляром елемента. Використовуйте форму інтерполяції рядків довгих форм, щоб досягти того, що ви шукаєте. .box {: id => "item # {s}"}
EmFi

6

Ви можете встановити 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>
    

Довідка:

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.