Expliquer ExtJS 4 la gestion des événements
J'ai récemment commencé à apprendre ExtJS, et ont du mal à comprendre comment gérer les Événements. Je n'ai aucune expérience de toutes les versions antérieures de ExtJS.
À la lecture de différents manuels, des guides et des pages de documentation, j'ai compris comment l'utiliser, mais je ne suis pas clair sur la façon dont il fonctionne. J'ai trouvé plusieurs tutos pour les anciennes versions de ExtJS, mais je ne suis pas sûr de savoir comment applicables, ils sont dans ExtJS 4.
Je suis spécifiquement à la recherche sur le "dernier mot" sur des choses comme
- quels arguments ne un événement la gestion des fonction de se passer? Est-il d'une série d'arguments qui sont toujours passés?
- comment définir des événements personnalisés pour les composants personnalisés nous écrire? comment pouvons-nous le feu de ces événements personnalisés?
- la valeur de retour (vrai/faux) affectent la façon dont l'événement bulles? Si non, comment pouvons-nous contrôler la remontée d'événements à partir de l'intérieur ou de l'extérieur du gestionnaire d'événement?
- est-il un moyen standard pour enregistrer des écouteurs d'événement? (Je suis venu à travers de deux manières différentes, jusqu'à maintenant, et je ne suis pas sûr pourquoi, chaque méthode a été utilisée).
Par exemple, cette question m'amène à croire qu'un gestionnaire d'événement peut recevoir tout à fait un peu d'arguments. J'ai vu d'autres tutoriels où il y a juste deux arguments pour le gestionnaire. Quels sont les changements?
- Viens de remarquer... hors sujet?
- 88 Upvotes sur la question, 155 upvotes sur la première réponse, et le grand et puissant Andrew décide de ce que l'on est hors sujet. Graves voyage continue!
- J'ai voté pour ré-ouvrir cette question que les réponses ici sont une mine d'or. J'ai édité la question afin de mieux s'adapter à la Q et Un style .
- S'il vous plaît ouvrir de nouveau à cette question parce que c'est vraiment utile & véritable question. si aveuglément, nous ne pouvons pas fermer.
- C'est une question bien formulée, et je ne vois aucune raison de le fermer. L'appel de cette hors sujet est ridicule. Voté pour la rouvrir.
Vous devez vous connecter pour publier un commentaire.
Nous allons commencer par décrire les éléments du DOM' la gestion des événements.
Nœud DOM la gestion des événements
Tout d'abord, vous ne voulez pas travailler avec nœud DOM directement. Au lieu de cela, vous allez probablement vouloir utiliser
Ext.L'élément
interface. Pour les fins de l'attribution des gestionnaires d'événements, Élément.addListener
et Élément.on
(ils sont équivalents) ont été créés. Ainsi, par exemple, si nous avons html:et nous voulons ajouter
click
gestionnaire d'événement.Nous allons récupérer
Element
:Maintenant, nous allons vérifier les docs pour
cliquez
événement. Il est gestionnaire peut avoir trois paramètres:Sachant tout ce genre de choses que nous pouvons lui attribuer gestionnaire:
Widgets gestion des événements
Widgets gestion des événements est à peu près similaire pour les nœuds DOM la gestion des événements.
Tout d'abord, les widgets de la gestion des événements est réalisé en utilisant
Ext.util.Observables
mixin. Afin de gérer les événements correctement votre widget doivent contenantExt.util.Observable
comme un mixin. Le tout intégré dans les widgets (comme le Panneau, la Forme, l'Arbre, Grille, ...) aExt.util.Observable
comme un mixin par défaut.Pour les widgets, il y a deux façons de l'attribution des gestionnaires. La première est d'utiliser sur de la méthode (ou
addListener
). Nous allons par exemple créerButton
widget et attribuerclick
cas à elle. Tout d'abord, vous devez vérifier événement docs pour le gestionnaire d'arguments:Maintenant, nous allons utiliser
on
:La deuxième façon est d'utiliser du widget les auditeurs config:
Avis que
Button
widget est un type spécial de widgets. Cliquez sur l'événement peut être attribuée à ce widget à l'aide degestionnaire
config:Des événements personnalisés de tir
Tout d'abord vous devez vous inscrire à un événement à l'aide addEvents méthode:
À l'aide de la
addEvents
méthode est facultative. Comme des commentaires de cette méthode de dire qu'il n'est pas nécessaire d'utiliser cette méthode, mais elle fournit un lieu pour les événements de la documentation.Mettre le feu à votre cas d'utilisation fireEvent méthode:
arg1, arg2, arg3, /* ... */
sera passé dans gestionnaire. Maintenant, nous pouvons nous occuper de votre événement:Il est important de mentionner que le meilleur endroit pour l'insertion addEvents appel de la méthode du widget
initComponent
méthode lorsque vous définissez un nouveau widget:La prévention de remontée d'événements
Pour éviter le bouillonnement vous pouvez
return false
ou de l'utilisationExt.EventObject.preventDefault()
. Afin d'empêcher le navigateur par défaut de l'action deExt.EventObject.stopPropagation()
.Par exemple assignons le gestionnaire d'événements click pour notre bouton. Et si ce n'est de gauche le bouton a été cliqué empêcher le navigateur par défaut de l'action:
De tir de l'application des événements à l'échelle
Comment faire contrôleurs de parler les uns aux autres ...
En plus de la très grande réponse ci-dessus, je veux parler de l'application à l'échelle des événements qui peuvent être très utiles dans un MVC de configuration pour activer la communication entre les contrôleurs. (extjs4.1)
Permet de dire que nous avons un contrôleur de Station (Sencha MVC exemples) avec une boîte de sélection:
Lorsque la boîte de sélection déclenche un événement de changement, la fonction
onStationSelect
est déclenché.À l'intérieur de cette fonction, nous voyons:
Cela crée des incendies et d'une application à l'échelle de l'événement que l'on peut écouter à partir de n'importe quel autre contrôleur.
Donc dans un autre contrôleur, nous pouvons maintenant savoir quand la station de sélectionner la zone a été changé. Ceci est fait à travers l'écoute de
this.application.on
comme suit:Si la selectbox a été changé nous avons maintenant le feu de la fonction
onStationStart
dans le contrôleurSong
aussi ...De la Sencha docs:
Événements d'Application sont extrêmement utiles pour les événements qui ont beaucoup de contrôleurs. Au lieu d'écouter le point de vue même de l'événement dans chacun de ces contrôleurs, un seul contrôleur écoute le point de vue de l'événement et les feux d'une application à l'échelle de l'événement que les autres peuvent écouter. Cela permet également de contrôleurs de communiquer les uns avec les autres sans le savoir ou en fonction les uns des autres de l'existence.
Dans mon cas: en Cliquant sur un nœud de l'arborescence de mettre à jour les données dans une grille de panneau.
Mise à jour en 2016 grâce à @gm2008 les commentaires ci-dessous:
En termes de tir à l'échelle de l'application des événements personnalisés, il y a une nouvelle méthode de maintenant, après ExtJS V5.1 est publié, qui est à l'aide de
Ext.GlobalEvents
.Lorsque vous déclencher des événements, vous pouvez appeler le:
Ext.GlobalEvents.fireEvent('custom_event');
Lorsque vous enregistrez un gestionnaire de l'événement, vous composez le:
Ext.GlobalEvents.on('custom_event', function(arguments){/* handler codes*/}, scope);
Cette méthode n'est pas limitée aux contrôleurs. Tout composant peut gérer un événement personnalisé par l'intermédiaire de mettre le composant objet en tant que paramètre d'entrée de la portée.
Trouvé dans Sencha Docs: MVC Partie 2
Ext.GlobalEvents.fireEvent('custom_event');
Lorsque vous enregistrez un gestionnaire de l'événement, vous appelezExt.GlobalEvents.on('custom_event', function(arguments){/* handler codes*/}, scope};
Voici un violon. Cette méthode n'est pas limitée aux contrôleurs. Tout composant peut gérer un événement personnalisé par l'intermédiaire de mettre le composant objet en tant que paramètre d'entréescope
. La question doit être rouverte.Un truc plus pour le contrôleur des écouteurs d'événement.
Vous pouvez utiliser des caractères génériques pour regarder pour un événement à partir de n'importe quel composant:
Voulais juste ajouter quelques pence pour l'excellent réponses ci-dessus:
Si vous travaillez sur la pré Extjs 4.1, et n'avez pas l'application des événements à l'échelle, mais ont besoin d'eux, j'ai été en utilisant une technique très simple qui pourrait vous aider:
Créer un objet simple extension Observables, et de définir n'importe quelle application à l'échelle des événements que vous pourriez avoir besoin en elle. Vous pouvez alors déclencher ces événements à partir de n'importe où dans votre application, y compris les dom html de l'élément et de les écouter sur n'importe quel composant en relayant les éléments de ce composant.
Ensuite, vous pouvez, à partir de n'importe quel autre composant:
Et feu de tout composant ou élément du dom:
Juste deux choses que j'ai trouvé utile de savoir, même si elles ne font pas partie de la question, vraiment.
Vous pouvez utiliser le
relayEvents
méthode à dire d'un composant à écouter pour certains événements d'un autre composant, et alors le feu de nouveau, comme s'ils proviennent de la première composante. L'API docs donner l'exemple d'une grille de relayer le magasinload
événement. Il est assez pratique lors de l'écriture de composants personnalisés qui contiennent plusieurs sous-composants.Dans l'autre sens, c'est à dire en passant sur les événements reçus par une encapsulation de composants
mycmp
pour l'un de ses sous-composantssubcmp
, comme