richclient:emberjs:data:crud

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
richclient:emberjs:data:crud [2018/02/04 19:46] – [Delete] jcheronrichclient:emberjs:data:crud [2019/08/31 14:21] (Version actuelle) – modification externe 127.0.0.1
Ligne 113: Ligne 113:
  
 Tant que la méthode **save** n'est pas appelée, la persistance n'est pas réalisée, et les instances modifiées portent les flags mentionnant leurs modifications : Tant que la méthode **save** n'est pas appelée, la persistance n'est pas réalisée, et les instances modifiées portent les flags mentionnant leurs modifications :
 +  * isDirty
 +  * isDeleted
 +  * isNew
 +
 +<sxh javascript>
 +person.get('isAdmin');            // => false
 +person.get('hasDirtyAttributes'); // => false
 +person.set('isAdmin', true);
 +person.get('hasDirtyAttributes'); // => true
 +person.changedAttributes();       // => { isAdmin: [false, true] }
 +</sxh>
 +
 +Il est possible d'annuler les modifications avec **rollbackAttributes** tant que l'appel de la méthode **save** n'a pas été effectué.
 +
 +<sxh javascript>
 +person.get('hasDirtyAttributes'); // => true
 +person.changedAttributes();       // => { isAdmin: [false, true] }
 +
 +person.rollbackAttributes();
 +
 +person.get('hasDirtyAttributes'); // => false
 +person.get('isAdmin');            // => false
 +person.changedAttributes();       // => {}
 +</sxh>
 +
 +===== Erreurs de validation =====
 +
 +Côté router, il est possible d'utiliser le **error hook** pour intercepter les erreurs de chargement/mise à jour,
 +
 +<sxh javascript>
 +import Route from '@ember/routing/route';
 +
 +export default Route.extend({
 +  model(params) {
 +    return this.get('store').findAll('privileged-model');
 +  },
 +
 +  actions: {
 +    error(error, transition) {
 +      if (error.status === '403') {
 +        this.replaceWith('login');
 +      } else {
 +        // Let the route above this handle the error.
 +        return true;
 +      }
 +    }
 +  }
 +});
 +</sxh>
 +
 +
 +Si le serveur retourne des erreurs de validation au moment du save, la propriété **errors** du model permet de les afficher :
 +
 +<sxh html>
 +{{#each post.errors.title as |error|}}
 +  <div class="error">{{error.message}}</div>
 +{{/each}}
 +{{#each post.errors.body as |error|}}
 +  <div class="error">{{error.message}}</div>
 +{{/each}}
 +</sxh>
 +
 +
 +Il existe également un **loading event** permettant d'intervenir sur le chargement :
 +
 +<sxh javascript>
 +import Route from '@ember/routing/route';
 +
 +export default Route.extend({
 +  ...
 +  actions: {
 +    loading(transition) {
 +      let start = new Date();
 +      transition.promise.finally(() => {
 +        this.get('notifier').notify(`Took ${new Date() - start}ms to load`);
 +      });
 +
 +      return true;
 +    }
 +  }
 +});
 +</sxh>
 ===== Promises ===== ===== Promises =====
  
  • richclient/emberjs/data/crud.1517770002.txt.gz
  • Dernière modification : il y a 6 ans
  • (modification externe)