Utilizzare i casi per i diversi aiutanti Padrino Haml
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?
Soluzione
Go Let attraverso i casi d'uso.
- 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.
- 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.
- 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.