web-dev-qa-db-fra.com

up () et down () par rapport à Ext.getCmp ()

Je suis très confus lequel je dois utiliser pour l'objet grep entre up () down () et Ext.getCmp (ID).

Pour moi, il est plus facile de définir l'ID de l'objet et de récupérer l'objet par Ext.getCmp ('ID') et le code semble plus propre.

Par exemple:

console.log(this.up('panel').up('panel').down('grid'));
console.log(Ext.getCmp('myPanel'));

lequel est meilleur pour la performance?

26
Expert wanna be

Il existe de graves problèmes avec l'utilisation des ID et getCmp pour trouver vos composants. Le principal problème est que vous ne pouvez pas réutiliser le composant en toute sécurité car dans la plupart des cas, le balisage créera des éléments HTML avec des ID en double, ce qui n'est pas du code HTML valide. En outre, lorsque vous avez deux composants avec le même ID, vous rencontrerez un comportement inattendu difficile à suivre car le framework n'obtiendra pas une référence correcte à vos composants.

Il y a plusieurs articles de blog et de forum à ce sujet, ainsi qu'une vidéo de J. Garcia couvrant ce sujet. La façon suggérée d'utiliser getCmp est uniquement pour le débogage, en passant à d'autres méthodes (haut, bas, références, itemId et ComponentQuery ) pour le code prêt pour la production.

34
dbrin

Ext.getCmp() utilise une carte de hachage en interne, donc elle s'allume rapidement, presque aussi rapidement que la récupération de la valeur dans un tableau basé sur une clé.

.up() et down() sont implémentées en utilisant une traversée de la hiérarchie des composants, ce qui est un processus plus lent.

Mais up() et down() utilisent des sélecteurs, afin qu'ils puissent également sélectionner des classes, pas seulement des identifiants.

Vous devez juste vous rappeler qu'il existe diverses situations dans lesquelles vous souhaiterez peut-être utiliser up() ou down(), comme lorsqu'il existe un gestionnaire commun pour une multitude de contrôles, ou lorsque le composant que vous utilisez after a été généré automatiquement par le framework, vous ne pouvez donc pas lui donner vous-même un identifiant.

15
Izhaki