J'ai une question sur le chargement et la mise en cache d'objets distants avec Ember. Je développe une application Ember qui utilise le stockage côté serveur via une API REST. Certaines des données récupérées changent rarement, il est donc inutile de les récupérer sur le serveur à chaque chargement de l'application. Mais c'est aussi une question pour les applications qui doivent fonctionner hors ligne et qui enregistrent quand même leurs données sur un serveur.
Ember Data dispose d'un adaptateur de stockage intégré pour la persistance des modèles par le biais d'une API REST. un adaptateur pour le stockage local également (comme l'a souligné Ken ci-dessous). Le problème (si c'est un problème) est qu'un modèle n'a qu'un seul adaptateur de stockage, et il ne semble pas y avoir de concept de mise en cache des modèles récupérés autre que de les garder en mémoire.
J'ai trouvé des demandes similaires dans ce Liste de souhaits d'Ember et dans les commentaires de cet article discours de Tom Dale mais je n'ai pas trouvé d'indication que ce serait une fonctionnalité existante dans Ember.
J'ai deux questions (la première étant la plus importante) :
- Quelle est la meilleure façon - aujourd'hui - de mettre en œuvre des modèles en cache dans le stockage local et de les synchroniser avec des données distantes selon les besoins ?
- S'agit-il d'une fonctionnalité qu'il est prévu d'inclure dans Ember, ou du moins quelque chose que les mainteneurs estiment devoir être ajouté à terme ?
En ce qui concerne le point 1), je peux penser à plusieurs stratégies :
a) Étendre un adaptateur existant et ajouter un mécanisme de synchronisation à distance personnalisé :
App.Store.registerAdapter('App.Post', DS.LSAdapter.extend({
// do stuff when stuff happens
}));
b) Maintenir des classes de modèles distinctes - un ensemble pour les objets distants, et un ensemble pour les objets locaux - et synchroniser entre elles si nécessaire. Avec le cas standard Todo :
RemoteTodo –*sync*– Todo
|
UI
J'espère que c'est une question de débutant et qu'il existe un modèle bien établi pour cela.
Mis à jour : Trouvé cette question similaire . Il y a une bonne réponse, mais c'est un peu théorique. Je pense que j'aurais besoin de conseils pratiques ou de pointeurs vers des exemples de mise en œuvre.