Les règles pour les associations de type "appartient à" (belongsTo) en ExtJS

Neil McGuigan

Traducteur

vermine

L'association "appartient à", en anglais belongsTo, complète les associations "contient un" (hasOne) et "contient plusieurs" (hasMany) qui expriment des liaisons entre entités mais dans le sens inverse. L'auteur énonce des règles qu'il est préférable de respecter lorsqu'on utilise l'association "appartient à".
Cet article est la traduction de Rules for BelongsTo Associations in ExtJS publié sur ExtJS Tutorials.

- Titre : Les règles pour les associations de type "appartient à" (belongsTo) en ExtJS

- Auteur : Neil McGuigan

- Traducteur : vermine

- Parution : 12 juillet 2012

- Licence : 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.

Sommaire

- I. Les règles

- II. Un exemple

- III. Remerciements

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. Utilisez toujours le nom complet du modèle.

3. Définissez à chaque fois un getterName.

4. Définissez à chaque fois un setterName.

5. Positionnez la propriété associationKey si l'objet externe est retourné dans la même réponse que cet objet.

6. Définissez toujours la propriété foreignKey si vous souhaitez charger l'objet externe à volonté.

7. Pensez à modifier l'instanceName en quelque chose de plus court.

8. L'accesseur get se comporte différemment selon que l'objet externe soit chargé ou non. S'il est chargé, l'objet externe est retourné. Sinon, vous devez passer par une fonction de rappel (callback) pour l'obtenir.

9. Vous devez définir la propriété name si vous prévoyez de passer outre cette association.

10. Vous n'avez pas besoin d'une relation belongsTo pour qu'une association de type hasMany fonctionne.

11. Ajoutez la propriété primaryKey si l'identifiant du modèle parent n'est pas le champ id.

12. Parfois, vous avez besoin ou vous devez utiliser des associations de type "appartient à". Surveillez bien les références circulaires.

13. Appeler la fonction setter() ne semble pas affecter l'instance. Si vous voulez appeler le setter(), définissez ceci : object.belongsToInstance = obj.

II - Un exemple

Ext.define('Assoc.model.PhoneNumber', {
extend:'Ext.data.Model',

fields:[
'number',
'contact_id'
],

belongsTo:[
{
model:'Assoc.model.Contact',
getterName:'getContact',
setterName:'setContact',
associationKey:'contacts',
foreignKey:'contact_id',
instanceName:'contact'
}
],

proxy:{
type:'ajax',
url:'assoc/data/phone-numbers.json',
reader:{
type:'json',
root:'phoneNumbers'
}
}
});

/*
* En supposant que le modèle Contact utilise un proxy AJAX avec l'URL "contacts",
* et que son identifiant est le champ id, l'appel de la fonction ci-dessous
* fera une demande HTTP comme celle-ci : /contacts?id=88
*/

var pn = new Assoc.model.PhoneNumber( { contact_id:88 } );

pn.getContact( function(contact, operation){
console.log('Chargement du contact. this.contact contient maintenant les informations du contact.');
} );

III - Remerciements

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