2017-07-05 4 views
1

Ce sujet a déjà été discuté sur stackoverflow avant, mais pas avec la dernière version des données de ember, je pense. Au moins, aucune des suggestions que j'ai trouvées n'a fonctionné pour moi. J'utilise la dernière version des données Ember et Ember (vers 2.80.0). J'utilise le JsonApiAdapter.Ember: Editer l'objet du modèle sans définir isdirty

Scénario

Après charger un enregistrement à partir du serveur que je veux faire quelques changements à certaines de ses propriétés. Ces modifications ne doivent pas salir l'enregistrement et les attributs modifiés ne doivent pas apparaître dans le record.changedAttributes(). Tout changement que l'utilisateur peut faire après cela doit rendre l'enregistrement sale.

Recherche d'une solution

J'ai essayé de changer manuellement le drapeau IsDirty, mais il ne le fit pas. J'ai aussi essayé de trouver l'endroit dans le code de données de braises qui définit l'état après le chargement d'un enregistrement (parce qu'essentiellement j'essaye de faire la même chose) mais je n'ai pas trouvé où il est. J'ai également essayé record.send('pushedData'), mais je n'ai rien changé de l'état de l'enregistrement.

Toute aide appréciée.

Répondre

3

Je sais 3 méthodes qui permettent de modifier la réponse du serveur sans enregistrements: salir

  1. Vous pouvez remplacer la méthode de l'adaptateur handleResponse et apporter des modifications juste en charge utile. Vous pouvez remplacer la méthode normalize du sérialiseur.

  2. Vous pouvez charger des enregistrements à partir du serveur avec la méthode Ember. $. Ajax, modifier la réponse, puis la transmettre à la méthode pushPayload du magasin.

Les deux premières méthodes sont bonnes si vous avez besoin de modifier l'enregistrement après chaque chargement du serveur (quelle que soit la route ou le contrôleur utilisé). L'adaptateur et le sérialiseur peuvent être spécifiques au modèle. Si vous avez besoin de le faire en un seul endroit (contrôleur ou route), ou si vous avez besoin d'un accès aux variables de la route/du contrôleur - la troisième méthode est bonne.

Je ne suis pas au courant de la possibilité de marquer un enregistrement comme sale/pas sale. Si vous modifiez un enregistrement après son stockage, il devient sale.

+1

Parfait. pushPayload a fait l'affaire pour moi. J'ai trouvé qu'il peut être utilisé pour modifier les enregistrements existants dans le magasin en envoyant simplement la partie de la charge utile qui doit être modifiée. –