Estoy tratando de implementar una aplicación de página única basada en MVVM y actualmente estoy usando el marco Knockout.js para manejar la porción viewmodel/view de MVVM. Sin embargo, estoy confundido, ya que cada ejemplo que he analizado para implementar Knockout implica guardar un modelo de vista completo en la base de datos. ¿No faltan estos ejemplos en un paso de "modelo", donde el modelo de vista se sincroniza con el modelo de capa de datos y el modelo realiza la sincronización de validación/servidor.MVVM con Knockout.js
Me gustaría tener múltiples plantillas/vistas diferentes en una sola página, cada una con un modelo de vista diferente. Otra cosa que encuentro que falta con knockout.js es sincronizar un solo modelo (no un modelo de vista) a través de diferentes vistas. No creo que tenga sentido tener un modelo de vista gigante que cada vista comparta, así que pensé que cada vista tendría su propio modelo de vista, pero cada modelo de vista se sincronizaría con los campos de solo algunos modelos de toda la aplicación necesarios para cada vista.
La página en la que estoy trabajando recupera un modelo gigante (más de 30 campos, varias capas de relaciones padre/hijo) y creo que tiene sentido que todos mis modos de vista se sincronicen con este modelo. Investigué Knockback.js (que combina knockout.js y backbone.js) sin embargo terminé reescribiendo la mayoría de las funciones como fetch, set, save, porque la página está obteniendo datos de una API (y puedo simplemente sincronizamos un modelo completo de ida y vuelta con el servidor), así que decidí no hacerlo.
ejemplo visual de mi solicitud:
(capa del modelo) M | M
(viewmodel/view layer) VM-V | VM-V | VM-V | VM-V
otro ejemplo
Un ejemplo sería el modelo de usuario = {nombre: "primero", lastName: "pasado", ...}
un modelo de vista sólo tiene nombre de pila, otro modelo de vista sólo necesita apellido
ViewModelA = {nOMBRE: app.User.firstName()} = {
ViewModelB nombre: app.User.lastName()}
¿Es la única manera de hacer esto para definir un sistema de publicación/publicación para los cambios de modelo y modelo de vista? ¿Es esta una arquitectura buena/mantenible? ¿Me estoy perdiendo un concepto básico aquí? Todos los consejos son bienvenidos.
+1 por mencionar pub/sub, olvidé mencionar eso. – Tyrsius
En primer lugar, perdón por la respuesta tardía John y @Tysirius, me pusieron en otro proyecto durante la semana pasada. Me gusta mucho la estructura desacoplada V/VM que estás sugiriendo. Me gusta la idea de que persista un modelo general independientemente de la "página" en la que esté en el SPA. Esencialmente, cómo lo interpreté fue que tengo un modelo que tiene, por ejemplo, 10 campos (ahora todos ko.observable()), luego múltiples modelos de visualización que se sincronizan con una representación parcial de ese modelo (solo algunos de los campos)), y la "ondulación" está funcionando brillantemente. –
Me alegra saber que funciona para usted. Es un patrón sólido IMO. –