He estado jugando con KnockoutJS y me encanta cuánto simplifica el diseño desde todos los ángulos evitando que las cosas caigan por las grietas. Mi pregunta es ¿cuál es la "mejor práctica" recomendada para guardar los datos en el servidor? Según tengo entendido, en un MVVM conectado, la primera "M" es la capa de datos, por lo que el seguimiento de la dependencia y las notificaciones en el desencadenante ViewModel se guardan directamente en la capa de datos. En una aplicación de JavaScript, estamos desconectados y volvemos a guardar selectivamente en el servidor usando AJAX.¿La mejor manera de guardar los cambios en la aplicación web MVVM/Knockoutjs?
La aplicación en la que actualmente la uso es MVC3 y obtengo absolutamente cómo escribir una acción de "Guardar" en mi controlador, despliego un botón "Guardar" en algún lugar de mi página, publico todo el modelo de visualización para esa acción Guardar y luego persistir eso a la base de datos. Pero, ¿qué pasa cuando haces una edición rápida y luego la guardas de nuevo? ¿O qué pasa si un botón de guardar no se ajusta al flujo del diseño? En su lugar, ¿desea publicar en la acción cada vez que se realiza un cambio en el formulario sin ningún botón de guardar? Las ideas que he rebotado son:
- Publique todo el modelo de vista cada vez que se realice algún cambio y haga que la acción descubra qué es nuevo y qué no (ideal, especialmente para modelos grandes, si nada de lo contrario, porque los datos transmitidos en cada guardado serían innecesariamente grandes).
- Agregue una propiedad a cada elemento en el ViewModel que rastrea si es nuevo o ha cambiado desde la última vez que guardó. Luego, extraiga esos elementos y publíquelos solo en el servidor (no lo he probado, pero supongo que esto se puede hacer usando la propiedad _destroy, como se pretende para una aplicación de Rails).
- Separe en tantos ViewModels más pequeños como sea plausible para que cualquier dolor de las dos primeras opciones se minimice (esto probablemente debería hacerse independientemente).
- ¿Alguna otra manera mejor?
Tengo la esperanza de que hay algunas buenas ideas que no he pensado. Para poder enlazar declarativamente todo Y aún guardar eficientemente, sería increíble.
Usted está fusionando MVC (como en ASP.NET MVC) y MVVM. Ambos son esencialmente el mismo patrón, pero MVVM tiene cambios específicos para el diseño en contra de las aplicaciones WPF. – Will
En realidad KnockoutJS (http://knockoutjs.com) utiliza el patrón MVVM, que es a lo que se refería el póster también. –
¡Increíble pregunta!La misma pregunta sin Knockout quizás sea aún más útil, ya que es solo uno de muchos, muchos frameworks JS por ahí. Continuaré mi búsqueda de la respuesta a esta pregunta. – noocyte