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 17:05] jcheronrichclient:emberjs:data:crud [2019/08/31 14:21] (Version actuelle) – modification externe 127.0.0.1
Ligne 75: Ligne 75:
   title: 'Rails is Omakase',   title: 'Rails is Omakase',
   body: 'Lorem ipsum'   body: 'Lorem ipsum'
 +});
 +</sxh>
 +
 +Mise à jour de la création (persistance) :
 +
 +<sxh javascript>
 +post.save();
 +</sxh>
 +
 +===== Update =====
 +
 +Mise à jour de l'instance avec setter et persistance :
 +<sxh javascript>
 +this.get('store').findRecord('person', 1).then(function(tyrion) {
 +  // ...after the record has loaded
 +  tyrion.set('firstName', 'Yollo');
 +  tyrion.save();
 +});
 +</sxh>
 +
 +===== Delete=====
 +
 +Suppression d'une instance et persistance :
 +<sxh javascript>
 +  post.deleteRecord();
 +  post.get('isDeleted'); // => true
 +  post.save(); // => DELETE to /posts/1
 +</sxh>
 +
 +Il est possible d'utiliser destroyRecord pour effectuer directement la suppression :
 +<sxh javascript>
 +  post.destroyRecord();
 +</sxh>
 +
 +
 +===== Flags, dirty attributes et annulation =====
 +
 +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> </sxh>
Ligne 87: Ligne 205:
     //Erreurs de chargement     //Erreurs de chargement
     });     });
 +</sxh>
 +
 +<sxh javascript>
 +let post = store.createRecord('post', {
 +  title: 'Rails is Omakase',
 +  body: 'Lorem ipsum'
 +});
 +
 +let self = this;
 +
 +function transitionToPost(post) {
 +  self.transitionToRoute('posts.show', post);
 +}
 +
 +function failure(reason) {
 +  // handle the error
 +}
 +
 +post.save().then(transitionToPost).catch(failure);
 </sxh> </sxh>
  
  • richclient/emberjs/data/crud.1517760349.txt.gz
  • Dernière modification : il y a 6 ans
  • (modification externe)