Wie mache ich Datenattribute mit Haml und Rails?

Lesezeit: 4 Minuten

Benutzeravatar von Michael Durrant
Michael Durrant

ich kann haben

%a{href: '#', data_toggle_description_length: 'toggle_me_ajax'}

was es gibt mir Unterstriche nicht Bindestriche, dh

<a href="#" data_toggle_description_length="toggle_me_ajax"></a>

Allerdings möchte ich HTML haben data- Attribute, dh

<a href="#" data-toggle-description-length="toggle_me_ajax"></a>

aber wenn ich versuche, Unterstriche durch Bindestriche zu ersetzen, dh

%a{href: '#', data-toggle-description-length: 'toggle_me_ajax'}

Ich erhalte Syntaxfehler:

/home/durrantm/Dropnot/webs/rails_apps/linker/app/views/links/_links.html.haml:13: syntax error, unexpected tLABEL
...data-toggle-description-length: 'toggle_me_ajax')}>\n    tog...
...                               ^
/home/durrantm/Dropnot/webs/rails_apps/linker/app/views/links/_links.html.haml:13: syntax error, unexpected ')', expecting '}'
...ption-length: 'toggle_me_ajax')}>\n    toggleMeAjax\n  </a>\...
...                               ^
/home/durrantm/Dropnot/webs/rails_apps/linker/app/views/links/_links.html.haml:13: unknown regexp options - pa
/home/durrantm/Dropnot/webs/rails_apps/linker/app/views/links/_links.html.haml:13: syntax error, unexpected $undefined
... toggleMeAjax\n  </a>\n</span>\n", -1, false);::Haml::Util.h...
...                               ^
/home/durrantm/Dropnot/webs/rails_apps/linker/app/views/links/_links.html.haml:13: unterminated string meets end of file
/home/durrantm/Dropnot/webs/rails_apps/linker/app/views/links/_links.html.haml:13: syntax error, unexpected $end, expecting '}'

Benutzeravatar von Mandeep
Mandeep

Versuche dies:

%a{"data-toggle-description-length" => "toggle_me_ajax", href: "#"}

ODER

%a{href: "#", :data => {:toggle_description_length => "toggle_me_ajax"}}

Weitere Einzelheiten finden Sie unter Hier

Sie können auch verwenden html2haml-Konverter Online verfügbar

BEARBEITEN:

Wie in den Kommentaren erwähnt, gibt es ein paar weitere Syntaxen, die funktionieren würden

 %a{href: "#", { "data-toggle-description-length": "toggle_me_ajax" }}

ODER

%a{href: "#", { :"data-toggle-description-length" => "toggle_me_ajax" }}

Ich würde trotzdem die ersten beiden bevorzugen, da ich denke, dass die letzteren hässlich und irgendwie chaotisch aussehen.

  • +1 Schöner Fang! Ja, sieht so aus, als würde Rails den Unterstrich für die zweite Form in einen Bindestrich umwandeln. Ich mag diese zweite Form so froh, dass ich sie verwenden kann.

    – Michael Durrant

    22. Juni 2014 um 17:40 Uhr


  • Gibt es einen Grund, die neuere Hash-Syntax dort nicht zu verwenden? (Scheint ok für Fälle, die ich versuche).

    – Michael Durrant

    22. Juni 2014 um 17:41 Uhr


  • @MichaelDurrant werden beide dasselbe HTML generieren, also denke ich nicht wirklich, dass es darauf ankommt. Ich dachte nur, ich sollte in beide Richtungen schreiben, damit Sie selbst wählen können

    – Mandeep

    22. Juni 2014 um 17:44 Uhr

  • Eine andere Möglichkeit wäre die Verwendung von HTML-Stilattribute: %a(href= '#' data-toggle-description-length: 'toggle_me_ajax'). Auch die Umwandlung von Unterstrichen in Bindestriche könnte in Zukunft die Norm sein, nicht nur für verschachtelte Hashes, wie es derzeit der Fall ist: github.com/haml/haml/issues/782.

    – matt

    22. Juni 2014 um 22:40 Uhr

  • Auch: { “data-toggle-description-length”: “toggle_me_ajax” } oder sogar { :”data-toggle-long-data-attribute” => “tickle_me_elmo” } wenn du Raketen magst.

    – Ein Fader dunkel

    23. Juni 2015 um 11:38 Uhr

Es ist wirklich nicht viel zu verwenden { ... } Stil in Haml. HTML-Stilattribute sind eine flexiblere und natürlichere Art der HTML-Generierung.

%a(href="#" data-toggle="target") my link

Es werden keine Kommas, keine Hash-Raketen etc. benötigt. Sie können auch sehr einfach Variablen interpolieren oder direkt zuweisen, ohne den Stil zu wechseln.

z.B

%a(href=link data-toggle="#{id}-toggle")

Wo link Und id sind Variablen aus dem aktuell gebundenen Bereich.

Insbesondere können Sie auch Attribute aus xmlns nahtlos einbeziehen, die SVG-Generierung verwendet zum Beispiel viele Namespace-Präfixe:

%link(xlink:type="simple" xlink:href=link)

Es gibt keinen zwingenden Grund, einen anderen Stil zu verwenden.

  • Because there are no commas separating attributes, though, more complicated expressions aren’t allowed. For those you’ll have to use the {} syntax aus haml.info/docs/yardoc/file.REFERENCE.html#htmlstyle_attributes_

    – Engr. Hasanuzzaman-Beschwörung

    28. März 2016 um 8:24 Uhr

  • Ihre Vorlagen sollten keine komplexen Ausdrücke enthalten, da dies unnötige Probleme bei der Wartung der App verursacht.

    – Okodo

    28. März 2016 um 8:45 Uhr

  • Ich bin mir nicht sicher, warum dies nicht die akzeptierte Antwort ist. Das ist viel besser, als die Allzwecksyntax von Ruby für die spezifische Aufgabe des Setzens von HTML-Attributen zu verwenden. Bei allem, was mit HTML nicht stimmt, ist die Attributsyntax nicht wirklich ein Problem.

    – Andreas Köster

    18. August 2019 um 4:38 Uhr

  • @AndrewKoster hauptsächlich, weil die Antwort mehr als ein Jahr nach dem Original kam. Beachten Sie, dass die akzeptierte Antwort jetzt 67 Stimmen hat, also bin ich mir nicht sicher, ob ich sie trotzdem ändern sollte

    – Michael Durrant

    27. September 2021 um 15:17 Uhr

So etwas sollte wirklich gut funktionieren:

%a{ "data-user-id" => "#{@user.id}" }

1448880cookie-checkWie mache ich Datenattribute mit Haml und Rails?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy