Des accesseurs de type get sur des modèles

Neil McGuigan

Traducteur

vermine

Cet article est la traduction de Getters on Models publié sur ExtJS Tutorials.

- Titre : Des accesseurs de type get sur des modèles

- Auteur : Neil McGuigan

- Traducteur : vermine

- Parution : 7 août 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. Explications

- II. Champ virtuel

- III. Remerciements

I - Explications

La méthode de conversion d'un champ du modèle est appelée lorsqu'une valeur est définie (pas lue), ce qui n'est pas le mieux.

Cette méthode est également appelée lorsqu'un modèle est construit, avant que les associations ne soient chargées. Ce qui signifie que vous ne devriez pas l'utiliser comme un pseudo-accesseur.

II - Champ virtuel

Voici comment faire un champ virtuel sur un modèle :

Ext.define('My.model.Contact', {
extend:'Ext.data.Model',

getfull_name: function(){
return this.get('first_name') + ' ' + this.get('last_name');
},

fields:[
'first_name',
'last_name'
],

/* réécriture de Model.get */
get: function(field){
if(this['get'+field]) return this['get'+field](); //si get<field> existe, l'appeler
else return this.callParent(arguments); //sinon, utiliser le get normal
}
});

Utilisation :

var contact = Ext.create('My.model.Contact');
contact.set('first_name');
contact.set('last_name');

console.log(contact.get('full_name'));

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 : Getters on Models.
Je remercie également ram-0000 pour sa relecture rapide.