2016-06-09 26 views
-1

Ich suche nach einer Möglichkeit, einen Wert an eine Liste aufzählbar zu übergeben, damit ich eine Reihe von Listenelementen für eine <ul> produzieren konnte. Der Wert sollte von dem Element angezeigt werden, das es erlaubt.Kann ein Wert an eine YAML-Liste übergeben werden?

  • neue
  • Favoriten (15) <-15 wobei der Wert I angezeigt werden soll.
  • archivierten
  • gelöscht

folgendem Grund nicht wie es ist, aber sollte nicht funktioniert helfen, das Ziel zu erreichen, veranschaulichen.

HAML

%ul 
    =list_of t('.menu', favorites_count: 15) do |item| 
    #{item} 

YAML

menu: 
    - new 
    - favorites ('%{favorites_count}') 
    - archived 
    - deleted 

Hinweis: Anfangs hatte ich meine YAML schließen die <li> Tags in einem Wörterbuchform, innerhalb von Zeichenketten, von denen eine die Zählwert Aber ich finde es ein bisschen ungeschickt HTML und YAML zu mischen, etwa so:

menu: 
    first_item: <li>new</li> 
    second_item: <li>favorites %{favorites_count}</li> 
    third_item: <li>archived</li> 
    fourth_item: <li>deleted</li> 

daher für eine sauberere Option suchen, die nur Tags auf der HAML Seite machen werden und nicht Wurf sie in YAML.

+0

Gibt es einen Grund, dies nicht zu tun, sagen wir, ein Teil? Was gewinnst du, wenn du dies in YAML schreibst? –

+0

Eine teilweise, ich denke, es ist ein bisschen zu viel. –

+0

@Jordan Ich habe mehrere andere "Menüs" Listen zu laden mit variabler Anzahl von Elementen pro Menü und immer andere Namen, so dass ich auch für jeden von ihnen Schlüssel erstellen müsste. –

Antwort

1

I18n.t verwendet Interpolation Syntax sehr ähnlich sprintf ‚s, die Sie zu Ihrem Vorteil nutzen können:

%ul 
    = list_of t(".item") do |item| 
    = sprintf(item, favorites_count: 15) 

Ich bin nicht ganz sicher, ob das die richtige Haml Syntax, aber Sie bekommen die Idee.

+0

Gute Sachen, es geschafft, es ein wenig zu verkürzen: = "# {item}"% {favorites_count: 15} –

+1

Tun Sie nicht '" # {item} "'. '# {...}' ist für die String-Interpolation, aber Sie interpolieren hier nichts. Wenn Sie wissen, dass "item" eine Zeichenfolge ist, verwenden Sie einfach "item". Wenn Sie nicht sicher sind, ob es sich um eine Zeichenfolge handelt, verwenden Sie 'item.to_s'. Mit anderen Worten, tun Sie '= item% ...' oder '= item.to_s% ...'. '" # {...} "' ist immer unnötig. –