Domanda

http://www.padrinorb.com/guides/application-helpers ma sono poco chiaro quali siano i casi d'uso per ciascuna delle aiutanti vista. In particolare, come si fa content_for/yield_content, render/partial, capture_html, and concat_content tutti in forma insieme?

In questo momento ho usato nelle mie render 'my/view' controllori e gettando in qualche =partial 'my/partial' entro 'my/view' solo di spezzare il file del modello principale in porzioni più piccole.

E 'il modo giusto per andare a questo proposito? E quando / dove dovrei voler utilizzare le altre funzioni helper?

È stato utile?

Soluzione

Go Let attraverso i casi d'uso.

  1. content_for / yield_content

Questo è per iniettare il contenuto in un file di layout che potrebbe essere utile. Esempio è l'aggiunta di ulteriori css / scripts in un layout da un altro modello. L'esempio sulla guida è lo stesso, che mostra come aggiungere i file CSS per il layout da qualsiasi modello che impone loro. È inoltre possibile utilizzare per l'aggiunta di contenuti su barre laterali, ulteriori collegamenti, ecc E 'per le cose che non richiedono il loro modello, ma necessità di passare di nuovo le informazioni a un layout in base alla vista viene mostrato.

  1. rendering / parziale

di rendering è per mostrare un dato modello associato con un percorso. render dovrebbe essere utilizzato per le azioni principali, dopo un percorso è stato elaborato. partial è come un 'metodo' in vista. Può essere riutilizzato e variabili possono essere passati per cambiare la destinazione. Si utilizza partial nei template principali per rompere il codice e riutilizzare pezzi di vista che altrimenti potrebbe sembrare ridondante.

  1. capture_html / concat_content

Questo è di solito utilizzato per creare i propri aiutanti che si blocchi di contenuto. Per esempio creiamo un aiutante che prende un blocco Haml e avvolge in un div. L'uso è il seguente:

# 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

Per implementare questo e utilizzarlo in un modello, è necessario essere in grado di 'catturare' l'Haml passato nel blocco al fine di elaborare e poi avvolgere un div intorno ad esso. Qui è dove entra in gioco capture_html:

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

Questo richiederà il contenuto e sputare nella vista avvolta in un div. Ora, lascia presumere che vogliamo questo helper per essere più complessa e quindi si desidera che l'uso per essere più simile a questo:

# 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

ma funziona anche in altri soccorritori:

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

Per stampare correttamente il contenuto avvolto dal aiutante sia in un modello e rubino dritto, possiamo usare concat_content e controllare per vedere se abbiamo bisogno di 'concat' il risultato per il modello o semplicemente restituirlo.

 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

Spero che questo funziona come una panoramica di base. Le funzioni possono sovrapporsi ma generalmente diventa chiaro quando uso che in base al contesto specifico.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top