Les règles pour les associations de type "contient plusieurs" (hasMany) en ExtJS

L'association "contient plusieurs", en anglais hasMany, est une association au même titre que "contient un" (hasOne) et "appartient à" (belongsTo) qui expriment des liaisons entre entités. L'auteur énonce une série de règles qu'il est préférable de respecter lorsqu'on utilise l'association "contient plusieurs".
Cet article est la traduction de Rules for HasMany Associations in ExtJSRules for HasMany Associations in ExtJS publié sur ExtJS TutorialsExtJS Tutorials.

Article lu   fois.

Les deux auteur et traducteur

Site personnel

Traducteur :

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. Les règles

  1. Mettez le proxy dans le modèle, à moins d'avoir une très bonne raison de ne pas le faire. L'objet héritera du proxy du modèle, et vous pourrez toujours le réécrire par la suite si nécessaire.
  2. Indiquez toujours (requires) les modèles enfants si vous les utilisez dans l'association hasMany. Pour le faire facilement et pour éviter les éventuelles références circulaires, vous pouvez les intégrer dans votre fichier application.js.
  3. Utilisez toujours la propriété foreignKey si vous souhaitez charger les objets enfants à volonté.
  4. Utilisez toujours la propriété associationKey si vous retournez les objets enfants dans la même réponse que l'objet parent.
  5. Si vous le souhaitez, vous pouvez combiner les propriétés foreignKey et associationKey.
  6. Donnez systématiquement un nom à votre association hasMany.
  7. Utilisez toujours le nom complet du modèle dans votre association hasMany.
  8. Si vous utilisez un Reader JSON, pensez à donner à la racine du lecteur un nom significatif.
  9. Vous n'avez pas besoin d'une relation belongsTo pour qu'une association de type hasMany fonctionne.

II. Un exemple

 
Sélectionnez
Ext.define('Assoc.model.Contact', {

   extend:'Ext.data.Model',

   requires:[
       'Assoc.model.PhoneNumber'          /* règle 2 */
   ],

   fields:[
       'name' /* le champ id est hérité de Ext.data.Model */
   ],

   hasMany:[
   {
       foreignKey: 'contact_id',          /* règles 3 et 5 */
       associationKey: 'phoneNumbers',    /* règles 4 et 5 */
       name: 'phoneNumbers',              /* règle 6 */
       model: 'Assoc.model.PhoneNumber'   /* règle 7 */
   }
   ],

   proxy:{                                /* règle 1 */
       type: 'ajax',
       url: 'assoc/data/contacts.json',
        
       reader: {
           type: 'json',
           root: 'contacts'               /* règle 8 */
       }
   }
});


// exemple :

var c = new Assoc.model.Contact({id:99});

/*
 * En supposant que PhoneNumber.proxy est un proxy AJAX et que son URL est positionnée 
 * à 'phonenumbers', la fonction ci-dessous fera une requête HTTP comme celle-ci :
 * /phonenumbers?page=1&start=0&limit=25&filter=[{"property":"contact_id","value":"99"}]
 * Par exemple, on pourrait faire une requête pour tous les numéros de téléphone 
 * mais en demandant au serveur de les filtrer sur le contact_id, c'est-à-dire 99 dans notre cas.
 */
c.phoneNumbers().load(); 

III. Remerciements

Cet article a été publié avec l'aimable autorisation de Neil McGuigan. L'article original peut être lu sur le blog ExtJS TutorialsExtJS Tutorials : Rules for HasMany Associations in ExtJSRules for HasMany Associations in ExtJS.
Je remercie également FirePrawn pour sa relecture rapide.

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2012 Neil McGuigan. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.