9
votes

Meilleur moyen d'enregistrer les modifications de l'application Web de MVVM / KnockOutjs?

Je joue avec KnockOutjs et j'aime absolument combien il simplifie la conception de chaque angle en gardant des trucs de tomber dans les fissures. Ma question est de savoir quelle est la "meilleure pratique" recommandée pour enregistrer les données sur le serveur? Ma compréhension est que dans un MVVM connecté, le premier "M" est la couche de données, puis le suivi et les notifications de dépendance dans la gâchette de la viewModel enregistre directement la couche de données. Dans une application JavaScript, nous sommes déconnectés et enregistrez-vous de manière sélective sur le serveur à l'aide de Ajax.

L'application que je l'utilise actuellement dans est MVC3 et j'obtiens absolument comment écrire une action "Enregistrer" sur mon contrôleur, PLOP a "Enregistrer" quelque part sur ma page, postez l'ensemble de la vue sur cette sauvegarde et puis persister que à la base de données. Mais qu'en est-il de la modification rapide, puis de la sauvegarder à nouveau? Ou si un bouton d'enregistrement ne correspond pas au flux de la conception? Au lieu de cela, vous voulez poster à l'action à chaque fois qu'un changement est effectué sur le formulaire sans bouton de sauvegarde du tout? Les idées que j'ai rebondi sont:

  • Postez toute la vieilleModel Chaque fois que tout changement est effectué et que l'action découvre ce qui est nouveau et ce qui n'est pas (pas idéal, en particulier pour les grands modèles, si rien d'autre, car les données transmises sur chaque sauvegarde Soyez inutilement grand).
  • Ajoutez une propriété à chaque élément de la viewmodel qui suit s'il est neuf et / ou modifié depuis la dernière sauvegarde. Ensuite, Grep Sorez ces articles et post uniquement ceux du serveur (je n'ai pas testé cela, mais je suppose que cela peut être fait à l'aide de la propriété _Destroy, comme prévu pour une application Rails).
  • Séparer Autant de mots de vue plus petits que plausibles, de sorte que toute douleur à partir des deux premières options soit minimisée (cela devrait probablement être effectué indépendamment).
  • d'autres voies supérieures?

    Je suis plein d'espoir qu'il y a de bonnes idées là-bas que je n'ai pas pensé. Pour être capable de tout lier de manière prédicative et toujours sauvegarder efficacement serait génial.


4 commentaires

Vous vous confondez MVC (comme dans ASP.NET MVC) et MVVM. Ils sont essentiellement le même modèle, mais MVVM a des changements spécifiques à la conception des applications WPF.


En fait, knockoutjs ( knockoutjs.com ) utilise le motif MVVM, ce qui est ce que l'affiche faisait également référence.


Question géniale! La même question sans knockout serait peut-être encore plus utile, car c'est juste l'un des nombreux cadres JS. Je vais continuer ma chasse à la réponse à cette question.


-1 Lien de réponse accepté pour la solution brisée. Le code doit être ajouté à la réponse si nécessaire.


3 Réponses :


5
votes

Je viens de rentrer de Mix11 où j'ai assisté à Cette session sur knockout. JS. Cela vaut peut-être la peine de regarder Steve Sanderson manivant une démo de crud.


1 commentaires

Ouais, j'ai regardé cette démonstration magistrale la semaine dernière dès qu'il a été publié en ligne. Une vraie bonne démo qui montre ce que Knockout peut faire du côté du client, mais lorsqu'il a publié sur le serveur, il n'a rien fait, sauf le relayer le client pour montrer qu'il allait réellement sur le serveur. Je suis plus intéressé par ce que la meilleure pratique est lorsque vous enregistrez des modifications incrémentielles sur le serveur ... Tout en conservant la charge utile et le contrôleur efficace.



0
votes

La seule autre chose que je pouvais penser est S'abonner . Quand j'ai commencé à lire votre message, je pensais cependant des drapeaux avec Grep.

Edit: Mieux encore, ko.utils.compareArrays semble prometteur.

Voici un exemple de travail ..

La seule chose à faire est de détecter les modifications apportées aux valeurs des valeurs "retenues". Vous êtes bien sur votre chemin.


5 commentaires

Wow. +1 pour la mise en œuvre élégante et je vais aller de l'avant et marquer cela comme la réponse pour l'instant. La question était plus théorique dans la nature, alors je suis sûr qu'il y a toujours d'autres méthodes, mais la manière dont cet exemple est configuré est génial. Même s'il existe toujours un bouton de sauvegarde dans cette implémentation, la partie COOL est qu'il n'y a pas à être. Tant que quelque chose déclenche Ko.Utils.comparrays, vous avez pourriez-vous utiliser de manière sélective les tableaux que vous aimez. Ce qui est exactement ce que j'étais curieux de. Bien fait. Merci pour votre contribution.


L'exemple de lien est cassé ... Toute chance L'exemple est toujours disponible? J'ai un point de vue qui a plusieurs niveaux de relations et je suis à la recherche d'options différentes sur l'épargne


Je ne sais pas où ça va mais c'est parti. Si vous avez une question de question spécifique, soyez prêt à faire une fissure.


Votre violon a été supprimé car il contenait une refonte Iframe à ce qui ressemble à des logiciels malveillants. Vous pouvez vérifier votre compte sur jsfiddle pour voir qu'il n'était pas compromis. En outre, ce serait bien si vous avez inclus le code réel à votre réponse plutôt que de simplement relier une ressource externe.


-1 Lien de réponse accepté pour la solution brisée. Le code doit être ajouté à la réponse si nécessaire.



0
votes

Vous pouvez consulter le plugin de mappage pour KO KO, il vous permet de supprimer KO KNOKOUT à partir d'une matrice JSON. Si ce n'était pas trop gros, vous enregistrez ce tableau sur un serveur sur une minuterie (ou après un changement). J'espère que cela vous aidera, désolé si vous le saviez déjà.

http://knockoutjs.com/documentation/plugins-mbappe.html < / p>

http://knockoutjs.com/documentation/json-data.html < / p>


0 commentaires