Dove caricare i dati per cose come una barra laterale in quadri MVC?

4

Questo sembra estremamente semplice, ma ho letto molte domande correlate e non ho trovato una risposta adeguata.

Utilizzando Ruby on Rails o altri framework MVC simili, come posso caricare i dati che vengono visualizzati nelle barre laterali su più pagine?

Opzioni che conosco, con i problemi che vedo:

  • Caricalo in ogni metodo del controller che ne ha bisogno: causa la duplicazione del codice ;
  • Caricalo in un metodo su ApplicationController, che viene eseguito da tutti i controller: causerebbe il caricamento dei dati anche quando non necessario;
  • Carica direttamente dal modello nella vista: non MVC?

L'ho chiesto altrove e alcune persone mi hanno detto di "esaminare [inserire un altro modello qui]" o "utilizzare le chiamate Ajax per ottenere i dati". Anche se questi potrebbero funzionare, sto cercando una risposta sui framework MVC sul server.

    
posta Schrute 21.10.2014 - 01:39
fonte

2 risposte

2

Tipicamente, penso che la duplicazione sia meglio gestita spingendo il codice condiviso in una superclasse (in ApplicationController o in qualche altra superclasse dal quale il controller eredita) come metodo privato. Penso che oggigiorno DHH voglia che tu metta il tuo codice condiviso in moduli (erm, voglio dire preoccupazioni) e includa quelli nei tuoi controller, invece di spingere tutto in ApplicationController.

A seconda della situazione, esegui il codice in un before_filter su ogni azione del controller in cui hai la sidebar, oppure metti il before_filter in una superclasse e chiama skip_before_filter quando non desideri che il codice venga eseguito prima di un'azione specifica del controller .

Inoltre, è certamente possibile usare ajax per realizzare questo, ma a meno che tu non abbia una buona ragione, eviterei di farlo in quel modo.

Ci sono anche momenti in cui penso che chiamare i metodi di classe su un modello direttamente da una vista sia perfettamente OK. Come ottenere semplici conteggi, per esempio.

    
risposta data 21.10.2014 - 05:10
fonte
2

Potresti avere problemi se stai pensando a tutti gli MVC come rapporto 1 a 1 tra Visualizza e Controller e Pagina per pagina. Una vista non è necessariamente una pagina e una pagina non è necessariamente una singola vista. Comunemente sono 1 a 1, ma spesso c'è di più. Potresti avere pagine composte da una manciata di visualizzazioni, sebbene di solito ci sia una vista principale correlata al controller corrente.

Invece di renderlo parte di più controller, puoi dedicare un nuovo controller alla barra laterale e chiamarlo SideBarController. Ha una sua vista.

In ASP.NET MVC land, chiamerei una vista parziale. Fondamentalmente un frammento di markup che è incluso in una pagina master o in un insieme di pagine. Una pagina principale è spesso una pagina di modello con intestazione, piè di pagina, navigatore sinistro e contenuto principale. In RoR land, penso che sia fatto usando il rendering esplicito

Ad esempio, il mio ProductsController restituisce una vista, il rendering della pagina dell'indice dei prodotti e all'interno di quella pagina del modello c'è un tag di markup che chiama SideBar.

Non ho toccato Rails da anni, ma penso:

render template: "sidebar/show"

O semplicemente:

render "sidebar/show"

È sufficiente poiché Rails conosce un controller diverso con la barra incorporata.

link

    
risposta data 21.10.2014 - 03:22
fonte

Leggi altre domande sui tag