Question

Je lis http://www.padrinorb.com/guides/application-helpers mais je ne suis pas clair quant à ce que sont les cas d'utilisation pour chacun des aides de vue. Plus précisément, comment faire content_for/yield_content, render/partial, capture_html, and concat_content toutes ensemble?

En ce moment je me sers dans mes render 'my/view' contrôleurs et jeter dans certains =partial 'my/partial' au sein 'my/view' juste pour briser le principal fichier de modèle en petits morceaux.

La bonne façon de faire à ce sujet? Et quand / où voudrais-je utiliser les autres fonctions d'aide?

Était-ce utile?

La solution

go Let dans les cas d'utilisation.

  1. content_for / yield_content

Ceci est pour injecter du contenu dans un fichier de mise en page qui pourrait être utile. Exemple ajoute / scripts supplémentaires css dans une mise en page à partir d'un autre modèle. L'exemple sur le guide est le même, montrant comment ajouter des fichiers CSS à votre disposition de tout modèle qui les oblige. Vous pouvez également l'utiliser pour ajouter du contenu, des liens sur des barres latérales supplémentaires, etc. Il est des choses qui ne nécessitent pas leur propre modèle, mais le besoin de passer de retour d'information à une mise en page en fonction de la vue de leur présentation.

  1. render / partiel

est rendu pour montrer un modèle donné associé à un itinéraire. rendre doit être utilisé pour les principales actions après une route est traitée. partielle est comme une « méthode » dans une vue. Il peut être réutilisé et les variables peuvent être transmises pour modifier la sortie. Vous utilisez dans les principaux modèles partials pour briser des morceaux de code et réutilisation des vues qui pourraient autrement sembler redondant.

  1. capture_html / concat_content

Ceci est habituellement utilisé pour créer vos propres aides qui prennent des blocs de contenu. Par exemple, nous allons créer une aide qui prend un bloc haml et l'enveloppe dans un div. L'utilisation est comme suit:

# 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

Pour mettre en œuvre ce et l'utiliser dans un modèle, vous devez être en mesure de « capturer » le haml passé dans le bloc afin de traiter et ensuite envelopper un div autour de lui. C'est là capture_html vient:

def div_wrapper(&block)
   nested_content = capture_html(&block)
   content_tag(:div, nested_content)
end

Cela prendra le contenu et recracher dans la vue enveloppé dans une div. Maintenant, laisse supposer que nous voulons que cette aide soit plus complexe et si vous voulez que l'utilisation soit plus comme ceci:

# 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

mais cela fonctionne aussi dans d'autres aides:

# some_helper.rb
def example(name)
  div_wrapper { "<h1>Test</h1>" }
end

Pour imprimer correctement le contenu enveloppé de l'aide à la fois un modèle et Ruby droit, nous pouvons utiliser concat_content et vérifier si nous devons « concat » le résultat du modèle ou revenir simplement.

 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

J'espère que cela fonctionne comme une vue d'ensemble. Les fonctions peuvent se chevaucher, mais généralement il devient clair quand à l'utilisation qui en fonction du contexte spécifique.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top