Dans ExtJS, callParent() par rapport à initConfig rapport de la superclasse
quelle est la différence entre ces fragments de code?:
constructor: function(config) {
this.initConfig(config);
}
constructor: function(config) {
this.callParent(arguments);
}
constructor: function(config) {
this.superclass.constructor.call(this, config);
}
ET, en quoi diffèrent impératif d'AUTRES méthodes que les constructor
?
Les lecteurs, j'ai trouvé quelque chose à propos de
Ext.apply(this, config || {})
, voir mon commentaire dans la accepté de répondre.OriginalL'auteur Paul | 2012-04-11
Vous devez vous connecter pour publier un commentaire.
Le deuxième et le troisième extrait de sont fonctionnellement équivalents.
callParent
est juste plus propre et plus simple d'invoquer la mère de la fonction au lieu de passer par lesuperclass
de la propriété.Le premier exemple est complètement différent. Pour l'un, il n'appelle pas la mère du constructeur. C'est généralement une mauvaise nouvelle. La classe de base a généralement une certaine initialisation qui doit être fait, et oublier d'appeler les parents pour le constructeur (et initComponent) est une commune de la source de bugs.
initConfig
est une méthode pratique qui:Ce qui est complètement différent d'appeler le constructeur parent. Ce invoquer le constructeur parent ne dépend entièrement de ce qu'il est écrit de le faire. Certains utilisent
initConfig
, d'autres ne le seront pas, et d'autres vont faire la même chose que initConfig n', mais manuellement.Il n'est pas nécessaire d'utiliser
initConfig
, et c'est même dangereux à certains moments. Mais c'est une autre histoire (par Ext 4.1, initConfig semble être, espérons-le inoffensifs et ne contiennent pas les mêmes effets secondaires dangereux qu'il a dans la version 4.0)Note De Côté
Juste à point. Dans la deuxième et la troisième extrait, le constructeur n'est pas nécessaire. Si votre constructeur est seulement l'appel de la mère du constructeur, vous pouvez laisser votre constructeur complètement.
ok, là pour apprendre... je sous-classé un proxy et de voir que je peut remplacer constructeur, initialiser, et initConfig. j'ai remplacé initConfig afin de modifier la configuration est appropriée? il a travaillé sur ok. aussi, toujours curieux de la diff entre initialiser et constructeur
Vous ne devriez probablement pas remplacer initConfig. Je dirais de ne pas utiliser initConfig à tous. Sencha ne pas utiliser initConfig jamais dans l'un de leurs trucs. La raison en est initConfig pouvez sauter sur vous dans certaines situations.
initialize
surProxy
est privé. Probablement préférable de le laisser seul. Pour les Proxys, je dirais que le meilleur moyen d'initialiser il est sous-classement par le constructeur.ok, merci. ill essayer
Après l'analyse de certains Ext source et de test: 1. Vous devez appeler
Ext.apply(this, config || {})
au lieu dethis.callParent(arguments)
si vous n'êtes pas de l'extension de toute les classes, sinonExt.create('class', {config})
sera pas appliquée. 2. L'appel dethis.callParent(arguments)
est suffisant si vous étendre à partir de la plupart des Ext classes (ou vos propres classes parent) depuis la classe parent qui s'étendent à partir Ext.La Base est déjà l'appel deExt.apply(this, config || {})
3. La plupart du Poste source de l'appelthis.callParent([config])
à autoriser explicitement config et à rejeter les autres arguments.OriginalL'auteur Matt Greer