2017-03-17 1 views
0

Je fonction suivante:store.CreateRecord pousser disque pour stocker la réponse même négative du serveur

this.store.createRecord('user', params).save().then(()=>{ 
     this.set('responseModal', 'Utworzono użytkownika!'); 
    }) 

Et ma question est la suivante: Pourquoi Ember pousser enregistrement à stocker avant la réponse du serveur? Par exemple: Je remplis le formulaire incorrectement, et mon serveur revient avec l'erreur et le statut: 400, mais mon enregistrement sans sa clé est toujours en stock. J'ai essayé quelque chose comme ceci:

.catch(()=>{ 
     user.unloadRecord(); 
    }); 

Mais il semble mauvais, quand quelque chose enregistre l'affichage et se cache immédiatement. Est-il possible de créer un enregistrement en magasin uniquement après une réponse du serveur sans bibliothèques externes? Je ne veux utiliser que des données ember pour connecter le client au serveur. Tous les conseils et suggestions seront appréciés

Répondre

2

Si la soumission de formulaire n'est pas réussie, nous leur donnerons une autre tentative avec des données déjà fournies par l'utilisateur. Nous devons donc stocker les données dans store. si vous naviguez vers une autre page ou ne voulez pas donner une autre tentative avec les anciennes données, vous pouvez toujours utiliser rollbackAttributes

Si le modèle hasDirtyAttributes cette fonction se défaire des modifications non enregistrées. Si le modèle est Nouveau, il sera supprimé du magasin.

+1

rollbackAttributes, c'est ce dont j'ai besoin :) Merci beaucoup –

0

Essayez d'appeler unloadRecord sur le magasin à la place et passez l'objet qui n'a pas enregistré correctement.

.catch(()=>{ 
    user.unloadRecord(); 
}); 

Je pense que cela devrait fonctionner:

//unloads the record from the store if save() fails. 
    //This prevents any invalid records from being pushed into the store and viewable to user. 
.catch(()=>{ 
    this.get('store').unloadRecord({userObjectWithNullId}); 
}); 

Une alternative serait d'utiliser la validation du formulaire. L'utilisateur ne sera pas en mesure de soumettre un formulaire tant que le formulaire n'est pas correct. Voici le docs pour cela