Bien que je ne puisse parler à backbone.js je peux vous dire que j'ai utilisé knock-out pour le grand effet combiné avec ASP.NET MVC. Chaque ASP.NET l'application que j'ai vu à ce jour utilise un mélange de côté client et côté serveur en vue de la génération. Il y aura toujours des moments où son plus pratique pour générer des vues de côté serveur. Prenez par exemple le conditionnel éléments de l'INTERFACE utilisateur basée sur le fait qu'un utilisateur est authentifié, ou s'ils ont une autorisation spécifique. Vous ne voulez pas un web savvy utilisateur d'être en mesure d'explorer votre côté client, les modèles et toutes les fonctionnalités qu'ils ne reçoivent. Bien sûr, vous pourriez obtenir autour de cette asynchrone de chargement différents modèles client, bla bla, ou la liquidation de l'écriture de code côté serveur pour générer votre côté client modèles... de Plus si SEO signifie quelque chose pour vous, vous pouvez embrasser côté client création de modèles (par lui-même) au revoir.
De sorte que le sweet spot, à mon avis, c'est quelque chose qui fait les deux. Dans mon expérience, j'ai trouvé ASP.NET MVC pour exceller à la fois.
Pourquoi ASP.NET MVC est génial
- Des Mises En Page (MasterPages)
- Rasoir (type-safe vues avec intellisense bonté)
- ActionFilters (endroit impressionnant pour l'application des conventions, telles que la journalisation, auth, etc)
- La sérialisation JSON gratuitement -
return Json(model)
- Modèle de liaison et de validation
- Cio et MVC sont les meilleurs amis (win)
- L'authentification + autorisation
- Pleins d'autres trucs que je ne peux pas penser.
À l'aide d'un framework côté client pour afficher génération, vraiment tout ce que vous êtes absent dehors sur est de Rasoir. Vous pouvez même utiliser des mises en page à un certain degré.
L'approche que je prends pour le développement avec ASP.NET MVC est de commencer par faire le travail d'application côté serveur. Cela vous oblige à penser que vous voulez que votre structure des URL, ce qui mérite un contrôleur, ce que vos itinéraires. Cela signifie également que vous obtenez l'avantage de la sécurité et de l'auto-complétion lors de la première itération de point de vue. À la fin de cet exercice, vous avez un de simple, conforme aux normes de la solution de (espérons-le) qui fonctionne sur n'importe quel dispositif connu de l'homme, que Google ne peut pas obtenir assez de.
J'ai ensuite, en adoptant une approche progressive pour la mise en œuvre des tranches de client-côté de la fonctionnalité. Côté client, j'écris un peu de javascript pour détourner une requête que je veux transformer en une requête AJAX, et de gérer la réponse à l'aide d'une version traduite du Rasoir vue. Sur le côté serveur, je prends une convention basée sur l'approche à l'aide d'un filtre d'actions. Cette action du filtre à environ suivantes:
- Est le ActionResult un ViewResult?
- Qu'est-ce que l'Accepter?
- HTML - Retour d'un PartialViewResult du même nom préfixé par "_" donné le même modèle
- JSON - Retour d'un JsonResult donné le même modèle
- Est le ActionResult un RedirectToRoute résultat?
- Retour EmptyResult (ou éventuellement vous pouviez retourner l'URL dans un JsonResult)
Avec cette approche, vous pouvez ajouter des fonctionnalités AJAX sans changer une seule ligne de code dans les contrôleurs. Une approche alternative est de suivre le Thunderdome Principal et disposent d'une ActionInvoker responsable pour envelopper le modèle dans un type de résultat en fonction du contexte de la demande. Je n'ai pas travaillé sur la façon de serveur de navigation latérale (redirections) ajustement avec cette approche.
Les déchets de départ avec un serveur de mise en œuvre, vous êtes doublement en place en vue de la génération de code (Rasoir + js-en fonction du modèle). Selon la façon dont beaucoup de votre application que vous souhaitez mettre en œuvre chez le client, ce qui peut ou peut ne pas être un problème. La Spark est l'exception à cette règle en ce que vous pouvez faire pour générer des modèles client pour vous! L'inconvénient de l'Étincelle, c'est que vous perdez intellisense (il y a un plugin pour ça, mais sa merde) qui n'est pas négligeable de perte, de plus je préfère juste Rasoir (ses cuit, il ne marche pas besoin d'être configuré, et ne va pas disparaître de si tôt).