2009-05-14 4 views
13

Sto implementando un database clienti che mi consente di cercare utenti e aziende, navigare e modificare i loro dettagli e molte altre cose usando ASP.NET MVC e javascript (jQuery).È una cattiva pratica restituire viste parziali contenenti javascript?

Ogni volta che si verifica un post o un get, lo faccio tramite jQuery.load e inserisco PartialView nel DOM.

Alcune viste parziali includono moduli. Voglio che anche quelli siano moduli ajax, quindi quelle partialview hanno documenti. Gestori già attivi che trasformano i moduli in moduli jax (tramite jquery.form).

All'inizio stavo gestendo questo nel callback/codice che inserisce la vista parziale nel DOM. Tuttavia, questo ha comportato un grande script contenente un sacco di funzioni javascript che si riferiscono a pagine diverse. Ho rifattorizzato il grande javascript inserendo gli script nelle rispettive pagine.

Ora il codice è più elegante (ho molti meno gestori di OnXXXPartialView) e il codice è ordinatamente all'interno della vista parziale a cui appartiene. La maggior parte di questi file include solo 3-4 righe di codice javascript, quindi il sovraccarico non è molto significativo.

Così efficacemente non sto solo aggiungendo elementi al documento DOM, ma a volte aggiungo anche un pezzo di javascript. In pratica funziona bene, ma sembra Firebug can't debug the dynamically loaded scripts.

Esistono dei metodi per risolvere il problema di Firebug, ma mi chiedo se la mia architettura potrebbe essere il vero colpevole qui. Dove metti javascript che appartiene alle viste parziali? C'è qualche pratica migliore?

+0

potrebbe ri-parola vostre domande per cambiare "include" a "contiene", se questo è il caso. –

+0

buon punto, fatto. –

+0

Continui a considerare che questo sia un metodo valido (ad esempio le viste parziali contengono javascript per un'organizzazione più pulita) o hai spostato su qualcos'altro? –

risposta

7

Se si sta affrontando il problema di includere javascript nelle viste parziali, passarei a restituire semplicemente JSON nelle chiamate ajax, in questo modo è possibile gestirlo tutto sul client. Però, ammetterò che preferisco sempre questo metodo.

Per quanto riguarda le migliori pratiche, ho sempre considerato negativo restituire l'html generato in una chiamata ajax invece di json, ma questo è solo per me (NON bussare, è una scelta personale). Ovviamente Microsoft non crede alle sue cattive pratiche in quanto hanno sviluppato specificamente funzionalità per supportarlo. Ad ogni modo, non prenderei in considerazione l'inclusione di javascript con il tuo html o peggio di inviare semplicemente html in primo luogo.

Sono curioso però, cosa c'è nella javascript?

Modifica: Per essere precisi, sono favorevole a effettuare una chiamata ajax per ottenere json, quindi utilizzando JS lato client per creare quella "vista parziale" e inserirla nella dom. Al contrario di fare una chiamata ajax per ottenere server reso html per il client per poi inserire nel dom.

Alcune viste parziali includono moduli. Voglio che anche quelli siano moduli ajax, quindi quelle partialview hanno documenti. Gestori già attivi che trasformano i moduli in moduli jax (tramite jquery.form).

Penso che si possa gestire questo nel callback/codice che inserisce la vista parziale nella dom.

Modifica: Se è ordinato, efficiente, ben organizzato e funziona per te, io rimango con esso. L'idea di avere tutto ciò che è bello e compatto in una vista parziale è decisamente allettante, quindi non sarei troppo preoccupato di violare le migliori pratiche. La mia unica preoccupazione era che il JS potesse essere riutilizzabile, il che sarebbe il caso se tu stessi inserendo lo stesso script più e più volte.Ma in questo caso sembra che tu abbia una buona dose di compartimentalizzazione, quindi rimango fedele a questo, a meno che tu non possa generalizzare i tuoi script e includerli con il resto del tuo JS.

+0

Grazie per i vostri pensieri su questo. Ho preso in considerazione anche JSON, ma preferisco mantenere la parte javascript il più piccola possibile, motivo per cui preferisco rendere le visualizzazioni sul server. Per quanto riguarda la tua domanda: Alcune viste parziali includono i moduli. Voglio che anche quelli siano moduli ajax, quindi quelle partialview hanno documenti. Gestori già attivi che trasformano i moduli in moduli jax (tramite jquery.form). –

+0

All'inizio stavo gestendo questo nel callback/codice che inserisce la vista parziale nella dom come suggerisci. Tuttavia, questo ha comportato un grande script contenente un sacco di funzioni javascript che si riferiscono a pagine diverse. L'ho riadattato al mio attuale approccio poiché mi sembrava troppo poco strutturato. Ora il codice è più elegante (ho molti meno gestori di OnXXXPartialView) e il codice è ordinatamente all'interno della vista parziale a cui appartiene. –

+0

Risponderò nella mia risposta –

3

Alla fine - JavaScript dovrebbe essere in un file (perché ogni http GET costa un po 'di tempo prezioso) e minisito. Questi link potrebbero interessarti: here e here.

Il tuo modo di gestire JS rende alcuni trasferimenti di dati non necessari - invece di inviare JS, renderlo statico, metterlo in cache sul lato client e parametrizzare.

post di cui sopra dà un bel suggerimento (JSON) Come parametrizzare i tuoi JS :)

+0

Buon punto, mi ci è voluto un po 'per capire cosa volevi dire, perché ho pensato che la domanda iniziale fosse parlare di "contiene" javascript piuttosto che di "include". Hai ragione, uno script include (src = script.js) sarebbe una brutta cosa da fare in quella situazione e sarebbe sicuramente qualcosa che vorresti evitare. –