jquery - template - backbonejs github
Backbone.js con ASP.NET MVC (5)
En los últimos días he estado leyendo sobre Backbone.js y cómo simplifica la interacción del código JS con los elementos de la Vista, básicamente dentro de HTML. También he leído sobre las diferencias entre KnockoutJS y Backbone.js. Ahora estoy pensando si usar uno u otro inevitablemente conduce a duplicar el código que ya tenemos en nuestra aplicación MVC (en su mayoría, ViewModels y rutas en global.asax) dentro de nuestras Vistas. Esencialmente nos obliga a codificar otro conjunto de modelos en Backbone o Knockout. Según tengo entendido, con KnockoutJS esto es aún más frecuente, por eso pensé que elegiría Backbone, pero ahora creo que no es tan diferente. Después de algunos ejemplos, observé que la misma duplicación se está haciendo evidente.
Además, ¿cómo mantenemos una aplicación de este tipo si, por ejemplo, ya tenemos un montón de MVC Partial Views y ahora debemos recrearlas en Backbone usando algún motor de plantillas como las plantillas JQuery?
He estado leyendo sobre backbone y knockoutjs últimamente, y también estaba pensando en cómo aprovechar el marco con asp.net mvc. Un método para evitar la duplicación de modelos es serializar (json) el modelo de vista del lado del servidor y usarlo como su backbone o modelo de eliminación directa. Efecto secundario positivo, los modelos del lado del cliente ya contienen los datos en la carga de la página y no tienen que obtener los datos a través de una solicitud de ajax cuando la página se carga por primera vez. Soy consciente de que solo serializar el módulo de visualización del lado del servidor no es suficiente para el backbone / knockout, pero podría ser un punto de partida. Quizás el modelo serializado podría ser una propiedad en el modelo del lado del cliente.
Acerca de las plantillas de jquery, por lo general pongo una plantilla de jquery en vista parcial. De esta manera se pueden representar fácilmente en tu vista de esta manera:
<script id="SomeTemplate" type="text/x-jquery-tmpl">
@Html.Partial("Templates/SomeTemplate")
</script>
Obviamente, portar una aplicación existente para aprovechar las plantillas de jquery llevará tiempo y esfuerzo.
Puede usar su aplicación ASP.NET MVC como un servicio RESTful que emite JSON para sus modelos de vista. Los modelos de Backbone se pueden asignar directamente a este JSON.
Recomiendo lo que ddango dijo en su comentario a su respuesta. Comienza a desarrollar nuevas funcionalidades con backbone o knockout. Tenemos una aplicación web que la mayor parte del sitio está en asp.net mvc convencional y una vez que aprendimos acerca de los nocauts, comenzamos a crear páginas que aprovechan los nocauts. Pueden coexistir pacíficamente. Si entonces hay un deseo de reemplazar la funcionalidad antigua por cualquier motivo (mantenimiento o tiene demasiado tiempo en sus manos;)). Entonces puedes hacerlo una pieza a la vez.
La estrategia que estamos empezando a tomar es que los controladores mvc de asp.net tengan dos tipos de funciones.
- Acciones que devuelven datos (utilizados por knockout para rellenar plantillas / controles)
- Las acciones que devuelven HTML son para solicitudes de página.
HTH
Si prefiere no volver a escribir sus parciales en plantillas, puede tratarlos como tales mediante el uso de métodos de controlador que devolverán la vista parcial como html, que recuperará al renderizar o inicializar la vista Backbone, por ejemplo:
public ActionResult SomeAction(){
var viewModel = new ViewModel();
return View("~/path/to/partial/view.ascx", viewModel); }
}
Probablemente podría llevar este método un paso más allá, recuperando primero el modelo de vista en el lado del cliente (o generándolo) y luego publicándolo en la acción en lugar de crear un modelo de vista dentro de la acción.
(Sin embargo, argumentaría que esto no es un intermediario mientras migras a las plantillas. Siempre harás una publicación para representar algo cuando ya tengas el lado del cliente de datos y solo necesitas la cadena de la plantilla)
re: ViewModels, cargar los datos desde un controlador a través de JsonResult
o mediante la serialización inicialmente es el camino a seguir. No necesita duplicar mucho código para los modelos de Backbone: el json se carga en el modelo y se analiza en atributos a los que puede acceder a través de la API Backbone.
Definitivamente recomiendo estos artículos (aunque no es específico de asp.net mvc):
http://backbonetutorials.com/what-is-a-model/
http://www.jamesyu.org/2011/01/27/cloudedit-a-backbone-js-tutorial-by-example/
El tutorial de cloudedit es una versión posterior (los Controllers
ahora son Routers
) pero aún es un buen lugar para comenzar, y es fácil ver los paralelos entre Rails y ASP.NET MVC.
Sin embargo, no se puede hablar de nocaut!
Una vez utilicé backbone con Rails en un proyecto, y terminé rehaciendo todas mis plantillas en Underscore - underscore.js es una dependencia de Backbone y viene con su propio lenguaje de plantillas.
Mi aplicación no era enorme, por lo que terminó no tomando mucho tiempo. Si tu aplicación ya es bastante compleja, puede ser una historia diferente.
Como dijo Suhas, la colección de Backbone tiene la capacidad de recuperar todos tus modelos del servidor y puedes enviarlos de vuelta usando una funcionalidad de guardado que se complementa con las llamadas ajax de Jquery. Todo lo que tiene que hacer es asegurarse de que estén serializados a través de JSON.
Encontré una serie reciente de 4 partes sobre el uso de Backbone con ASP.NET MVC 3, tal vez sea útil para usted: http://www.bitcandies.com/blog/2011/asp-net-mvc3-restful-application-tutorial-with-backbone-js-part-i/
Además, esto es una buena referencia para que me remita a cuando hago una prueba en .net mvc :)