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?

War es hilfreich?

Lösung

Gehen wir die Anwendungsfälle durch.

  1. 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.

  1. 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.

  1. 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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top