Anche se non riesco a parlare con backbone.js, posso dirvi che ho usato il knockout con grande effetto combinato con ASP.NET MVC. Ogni applicazione ASP.NET che ho visto fino ad oggi utilizza un mix di generazione di viste lato client e lato server. Ci saranno sempre dei momenti in cui è più conveniente generare viste sul lato server. Prendiamo ad esempio gli elementi dell'interfaccia utente condizionale in base al fatto che un utente sia autenticato o meno, oppure se hanno un'autorizzazione specifica. Potresti non volere che un utente esperto del Web sia in grado di esplorare i tuoi modelli lato client e di elaborare tutte le funzionalità che non ottengono. Certo, potresti aggirare il problema caricando in modo asincrono diversi modelli di client, blah blah, o finendo di scrivere codice lato server per generare i tuoi modelli client-side ... Inoltre se SEO significa qualcosa per te, puoi baciare i template sul lato client (da solo) arrivederci.
Quindi il punto debole, a mio parere, è qualcosa che fa entrambe le cose bene. Nella mia esperienza ho trovato ASP.NET MVC per eccellere in entrambi.
Perché ASP.NET MVC è impressionante
- layout (MasterPages)
- Razor (type-safe opinioni con intellisense bontà)
- ActionFilters (posto incredibile per l'applicazione di convenzioni, come la registrazione, autenticazione , ecc.)
- serializzazione JSON gratuitamente -
return Json(model)
- Modello di rilegatura e convalida
- CIO e MVC sono i migliori amici (Win)
- autenticazione + autorizzazione
- sacco di altre cose che non riesco a pensare.
Utilizzando un framework lato client per la generazione di viste tutto quello che ti manca è Razor. Puoi persino sfruttare i layout in una certa misura.
L'approccio che prendo allo sviluppo con ASP.NET MVC è iniziare facendo funzionare l'applicazione sul lato server. Questo ti costringe a pensare a te che vuoi la struttura dell'URL, cosa merita un controller, quali dovrebbero essere le tue rotte.Significa anche che ottieni il vantaggio della sicurezza del tipo e del completamento automatico durante la prima iterazione delle visualizzazioni. Alla fine di questo esercizio hai una soluzione semplice e conforme agli standard (si spera) che funzioni su qualsiasi dispositivo noto all'uomo, di cui Google non ne abbia mai abbastanza.
Quindi ho deciso di adottare un approccio incrementale all'implementazione delle porzioni di funzionalità lato client. Sul lato client scrivo alcuni javascript per dirottare una richiesta che voglio trasformare in una richiesta AJAX e gestire la risposta usando una versione tradotta della vista Razor. Dal lato del server prendo un approccio basato sulla convenzione usando un filtro azione. Questo filtro azioni fa approssimativamente quanto segue:
- ActionResult è un ViewResult?
- Che cos'è il tipo Accept?
- HTML - Restituisce una PartialViewResult con lo stesso nome con prefisso "_" dato lo stesso modello di
- JSON - Restituisce un JsonResult dato lo stesso modello
- È l'ActionResult risultato RedirectToRoute ?
- Return EmptyResult (o, in alternativa si può restituire l'URL in un JsonResult)
Con questo approccio è possibile aggiungere funzionalità AJAX senza cambiare una sola riga di codice nel controller. Un approccio alternativo è quello di seguire lo Thunderdome Principal e fare in modo che ActionInvoker sia responsabile del wrapping del modello in un tipo di risultato appropriato in base al contesto della richiesta. Non ho ancora capito come la navigazione lato server (reindirizzamenti) si adatti a questo approccio.
Lo spreco nell'iniziare con un'implementazione lato server sta raddoppiando nel codice generazione vista (modello basato su Razor + js). A seconda della quantità di applicazione che si desidera implementare sul client, questo potrebbe o meno essere un problema. Spark è l'eccezione a questo in quanto è possibile ottenerlo a generate client templates per te! Il lato negativo di Spark è che si perde intellisense (c'è un plugin per questo, ma è una schifezza) che non è una perdita insignificante, in più preferisco Razor (è cotto, non ha bisogno di essere configurato, e non sta andando via in qualsiasi momento presto).
+1, in attesa delle risposte. Hai preso in considerazione anche [knockout.js] (http://knockoutjs.com/) e [spine.js] (http://spinejs.com/)? La colonna vertebrale sembra essere meno conosciuta della spina dorsale, ma ho letto cose positive a riguardo. –
Anche se non è necessariamente direttamente correlato alla tua domanda, c'è una buona discussione su backbone e knockout qui: http://stackoverflow.com/questions/5112899/knockout-js-vs-backbone-js-vs Su quella nota, Aspetto anche le risposte su questo. – Jesse