2017-06-01 3 views
0

Dans mon application, je recherche des documents avec requête. Ensuite, je modifie un attribut dans un seul document, puis j'appelle à nouveau une requête de recherche.Comment ne pas perdre hasMany changements sur la requête Ember?

Le résultat est OK, je vois le document toujours dans un état sale avec l'attribut changé.

Ensuite, je choisis à nouveau l'un des documents et édite sa relation hasMany (de 2 à 4 éléments). Et puis j'appelle à nouveau la requête de recherche. Le résultat n'est PAS OK, hasMany changement de relation est perdu/éliminé/annulé.

Existe-t-il un moyen pour que la requête Ember (je suppose que c'est un rechargement interne d'Ember) ne restaure pas les changements de relation sauvegardés?

J'utilise Ember 2.9.1

Pour moi avons maintenant pas d'autre moyen que d'interdire toute action de requête de filtre ou des actions de route tout ce qui pourrait appeler requête à nouveau, car cela cause des données perdues que définie par l'utilisateur.

Répondre

1

La méthode store.query d'Ember restaure toujours les modèles à partir du backend (contrairement aux méthodes find*). Avec une requête, c'est le seul moyen de s'assurer que vous avez les données les plus à jour (et que les modèles chargés dans le magasin sont toujours valides). Même dans votre cas, vous pouvez rencontrer des résultats inattendus si vous modifiez les données de sorte qu'elles ne répondent plus à vos critères de requête.

Si vous souhaitez conserver les modifications entre les requêtes, je vous recommande de faire une copie de tous les modèles qui sont sales (vérifiez l'attribut hasDirtyAttributes). Vous pouvez les rassembler avec peekAll. Une fois copié, vous pouvez ensuite créer le query et patcher les enregistrements par ID. Peut-être en utilisant Ember.assign.

Même en utilisant cette méthode, je continuerais à penser que vous aurez du mal à suivre les changements et à vous assurer que les enregistrements restent cohérents avec votre requête. Comme quoi faites-vous si cet enregistrement n'a pas été retourné (supprimé sur le serveur ou ne répond plus à vos critères)? Est-ce que vous laissez tomber vos modifications? Que faire si vous avez un conflit entre les données du serveur et votre version locale (par exemple, un autre utilisateur a corrigé la relation hasMany que l'autre utilisateur interroge et modifie)?

ember-changeset semble être utile ici. Cependant, il n'est pas évident de savoir comment appliquer un ChangeSet à une nouvelle instance du même modèle. Bien qu'il soit possible de garder un snapshot et de les faire correspondre manuellement. Cependant, vous rencontrez toujours des problèmes de cohérence des données.

+0

Le meilleur serait si la requête n'a pas mis à jour mes tâches éditées du tout. L'utilisateur va éditer les départements de tâche (toujours pas enregistrer). Ensuite, il cliquera pour voir les tâches inachevées où l'édition est également entre eux et les départements BOOM reculer. Si elle a été supprimée en temps moyen, alors que la sauvegarde de l'API va réagir sur ce point. Si cela a changé, bien que cela peut arriver n'importe quand dans n'importe quelle application web, même une millième de seconde après que changysmens ait changé d'utilisateur, son web, api va s'occuper de la dernière solution ou de la solution de conflit. Lors de l'appel de rechargement sur les relations de modèle ne sont pas perdues mais, avec requête, ils sont :( –