2017-08-29 1 views
2

Existe-t-il une bibliothèque de meilleures pratiques ou de facto pour Vue.js lorsqu'il s'agit de mapper les réponses de l'API JSON aux objets de modèle javascript "réels"? Venant de développement iOS, il existe d'excellentes bibliothèques comme JSONModel et MagicalRecord traitant exactement cette question.Mappage des réponses JSON aux classes du modèle dans Vue.js

La plupart des tutoriels/exemples de Vue.js que j'ai pu trouver semblent fonctionner avec les réponses JSON. À mon humble avis, cela devient lourd et rapide. Par exemple, lorsque vous traitez avec des données brutes comme des chaînes de date qui seraient préférables à des objets Date réels. Cela implique donc une sorte de fonctionnalité de (dé) sérialisation. En outre, il serait bon d'avoir des choses comme Foo.findAll(), Foo.findById(1) ou foo.save() pour créer des appels appropriés au service backend.

J'ai trouvé vue-model qui semble prometteur, mais il ne semble pas avoir beaucoup de traction. Cela me fait réfléchir, si la cartographie de JSON à des objets n'est pas quelque chose que beaucoup de gens font dans leurs SPAs? Quelles sont les approches alternatives?

+0

Je suis aux prises avec la même question. J'ai trouvé une alternative aux modèles - redux, voir https://stackoverflow.com/questions/38445006/redux-state-as-array-of-objects-vs-object-keyed-by-id –

Répondre

1

Ce n'est pas vraiment une pratique courante. La beauté de travailler avec JSON dans un SPA basé sur un navigateur est que JSON analysé est javascript. Vous n'avez pas à mapper les valeurs dans une classe typée. Cela dit, je comprends votre point de vue, et à certains moments, j'ai construit une classe javascript dont le constructeur accepte un objet javascript comme un "initialiseur". Ensuite, dans une réponse API, vous pouvez simplement mapper la réponse pour convertir les objets bruts en instances "classe" avec des méthodes, des propriétés Date, etc.

Disons que j'ai une classe Animal javascript.

class Animal { 
    constructor(initializer){ 
    this.name = initializer.name 
    this.born = new Date(initializer.born) 
    } 

    sayMyName(){ 
    console.log(this.name) 
    } 
} 

Dans une réponse API, il est extrêmement simple de créer des instances Animal à partir de la réponse. Maintenant, la propriété data de votre animal dans Vue contient maintenant une collection d'objets Animal.

+0

J'espérais qu'il y aurait être une solution clé en main sans avoir à écrire manuellement toutes sortes de passe-partout répétitif. En outre, votre solution résout uniquement le problème (de) sérialisation. J'ai encore besoin de parler manuellement au backend du serveur pour aller chercher, mettre à jour, sauvegarder, etc. les ressources. Mais merci de me faire savoir que c'est plus ou moins la meilleure pratique! :) –

+0

La méthode sayMyName ne sera pas utilisable car la vue ne fonctionne qu'avec des objets flattés. –

+1

@AlekseyRazbakov Sauf pour le fait. https://codepen.io/Kradek/pen/ZXRYvG?editors=1010 – Bert