Wie kann ich dynamische ids in Haml machen?
-
19-09-2019 - |
Frage
#item
erstellt ein div mit id = "item"
.box#item
erstellt ein div mit class = "Box" und id = "item"
.box#="item "+x
erstellt ein div mit class = "Box" und einem Kommentar '# = "item" + x'
.box#
="item"+x
wirft "Illegale Element: Klassen und IDs müssen Werte haben."
Wie kann ich fertig die ID in eine Variable?
Lösung
Es gibt zwei Möglichkeiten:
Die lange Form Art und Weise (definieren Sie die ID, als ob es ein reguläres Attribut war):
.box{:id => "item_#{x}"}
Dies erzeugt (x
ist, was immer x.to_s
ausgewertet):
<div class="box" id="item_x">
Die Kurzform Art und Weise:
.box[x]
erzeugt die folgende Annahme x
eine Instanz von item
ist:
<div class="box item" id="item_45">
Sehen Sie die HAML Referenz für weitere Informationen.
Andere Tipps
Sie können die id
und class
in HAML legen Sie die folgenden Möglichkeiten
-
Der normale Weg
.box.item#item
<div id="item" class="box item"></div>
-
Wenn Sie die Interpolation können Sie dieses Format verwenden
.box{id: "item_#{123}", class: "item_#{123}"}
<div id="item_123" class="box item_123"></div>
-
Dieses Format erzeugt die Klasse und id die Objektreferenz mit
# app/controllers/items_controller.rb @item = Item.find(123)
.box[@item]
<div id="item_123" class="box item"></div>
-
Wenn Sie etwas Präfix
.box[@item, :custom]
<div id="custom_item_123" class="box custom_item"></div>
-
Wenn Sie eine benutzerdefinierte Klasse und id Generation benötigen müssen Sie die folgende Methode hinzufügen zu modellieren.
class CrazyUser < ActiveRecord::Base def haml_object_ref "customized_item" end end
Und dann werden Sie die benutzerdefinierte Klasse bekommen
.box[@item]
<div id="customized_item_123" class="box customized_item"></div>
Siehe: