Anwendungsfälle für die verschiedenen Padrino Haml -Helfer
Frage
ich lese http://www.padrinorb.com/guides/application-helpers Es bin mir jedoch unklar, was die Anwendungsfälle für jede der Ansichtshelfer sind. Insbesondere wie geht es? content_for/yield_content, render/partial, capture_html, and concat_content
Alles passt zusammen?
Im Moment habe ich benutzt render 'my/view'
in meinen Controllern und eingeworfen =partial 'my/partial'
innerhalb 'my/view'
Nur um die Hauptvorlagendatei in kleinere Stücke zu zerlegen.
Ist es der richtige Weg, es zu tun? Und wann/wo möchte ich die anderen Helferfunktionen verwenden?
Lösung
Gehen wir die Anwendungsfälle durch.
- content_for/rendat_content
Dies dient zum Injektieren von Inhalten in eine Layoutdatei, die möglicherweise nützlich sein kann. Beispiel ist ein zusätzliches CSS/Skripte in ein Layout aus einer anderen Vorlage. Das Beispiel auf der Anleitung ist das gleiche. Dies zeigt an, wie Sie Ihr Layout aus jeder Vorlage, die sie benötigt, CSS -Dateien hinzufügen. Sie können es auch verwenden, um Inhalte zu Seitenleisten, zusätzlichen Links usw. hinzuzufügen. Es ist für Dinge, die keine eigene Vorlage erfordern, aber Informationen an ein Layout zurückgeben müssen, das auf der angezeigten Ansicht basiert.
- rendern/teilweise
Render dient zur Anzeige einer bestimmten Vorlage, die einer Route zugeordnet ist. Render sollte für die Hauptaktionen verwendet werden, nachdem eine Route bearbeitet wurde. Teilweise ist wie eine "Methode" in einer Ansicht. Es kann wiederverwendet werden und Variablen können übergeben werden, um die Ausgabe zu ändern. Sie verwenden Partials in Hauptvorlagen, um Code aufzubrechen und Ansichten wiederzuverwenden, die sonst überflüssig erscheinen könnten.
- capture_html/concat_content
Dies wird normalerweise verwendet, um Ihre eigenen Helfer zu erstellen, die Inhalteblöcke aufnehmen. Lassen Sie uns zum Beispiel einen Helfer erstellen, der einen Haml -Block aufnimmt und ihn in eine DIV umhüllt. Die Verwendung ist wie folgt:
# template.haml
# NOTE the equals so the content is returned
# and added to the view directly
= div_wrapper do
%h1 Some heading
%p This is now wrapped in a div
Um dies zu implementieren und in einer Vorlage zu verwenden, müssen Sie in der Lage sein, den Haml in den Block zu erfassen, um zu verarbeiten und dann eine DIV um sie zu wickeln. Hier kommt Capture_html ins Spiel:
def div_wrapper(&block)
nested_content = capture_html(&block)
content_tag(:div, nested_content)
end
Dies wird den Inhalt einnehmen und ihn in die in einem Div eingewickelte Aussicht ausspucken. Nehmen wir nun an, wir möchten, dass dieser Helfer komplexer ist, und Sie möchten, dass die Verwendung eher so ist:
# template.haml
# NOTE the dash so the content is not outputted directly
- div_wrapper do
%h1 Some heading
%p This is now wrapped in a div
Aber es funktioniert auch bei anderen Helfern:
# some_helper.rb
def example(name)
div_wrapper { "<h1>Test</h1>" }
end
Um den verpackten Inhalt sowohl in einer Vorlage als auch in gerader Ruby ordnungsgemäß aus dem Helfer auszudrucken, können wir concat_content verwenden und prüfen, ob wir das Ergebnis mit der Vorlage "beschaffen" oder einfach zurückgeben müssen.
def div_wrapper(&block)
nested_content = capture_html(&block)
tag_result = content_tag(:div, nested_content)
block_is_template?(block) ? concat_content(tag_result) : tag_result
end
Ich hoffe, das funktioniert als grundlegende Übersicht. Die Funktionen können sich überlappen, aber im Allgemeinen wird klar, wann auf dem spezifischen Kontext verwendet werden soll.