web-dev-qa-db-fra.com

Comment créer des identifiants dynamiques dans Haml?

#item

crée un div avec id = "item"

.box#item

crée un div avec class = "box" et id = "item"

.box#="item "+x

crée un div avec class = "box" et un commentaire '# = "item" + x'

.box#
  ="item"+x

renvoie "Élément illégal: les classes et les identifiants doivent avoir des valeurs."

Comment puis-je définir l'ID sur une variable?

72
user225643

Il y a deux façons:

La forme longue (définissez l'identifiant comme s'il s'agissait d'un attribut normal):

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

produit ceci (x est ce que jamais x.to_s correspond à):

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

La manière de forme courte:

.box[x]

produit ce qui suit en supposant que x est une instance de item:

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

Voir référence HAML pour plus d'informations.

130
EmFi

Vous pouvez définir id et class dans HAML de la manière suivante

  1. La voie normale

    .box.item#item
    
    <div id="item" class="box item"></div>
    
  2. Si vous avez besoin d'interpolation, vous pouvez utiliser ce format

    .box{id: "item_#{123}", class: "item_#{123}"}
    
    <div id="item_123" class="box item_123"></div>
    
  3. Ce format génère la classe et l'id à l'aide de la référence d'objet

    # app/controllers/items_controller.rb 
    @item = Item.find(123)
    
    .box[@item]
    
    <div id="item_123" class="box item"></div>
    
  4. Si vous devez préfixer quelque chose

    .box[@item, :custom]
    
    <div id="custom_item_123" class="box custom_item"></div>
    
  5. Si vous avez besoin d'une génération de classe et d'ID personnalisée, vous devez ajouter la méthode suivante au modèle.

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

    Et puis vous obtiendrez la classe personnalisée

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

Référer:

5
Deepak Mahakale