7
votes

EXTJS Faire du feu manuellement Cliquez sur l'événement, bouton Param est différent du clic de la souris

Donc, j'ai un contrôleur de connexion, vous pouvez cliquer sur Connexion avec la souris ou appuyez sur la touche Entrée, comme ceci:

Ext.define('My.controller.Login', {
    extend: 'Ext.app.Controller',

    init: function(application) {
        this.control({
            "#idLogin button": {click: this.onButton},
            "#idLogin form > *": {specialkey: this.onKey}
        });
    },

    onButton: function(button, e, eOpts) {
        var win = button.up('window'); // the login window
        //do more stuff...
    },

    onKey: function (field, el) {
        if (el.getKey() == Ext.EventObject.ENTER) //ENTER key performs Login
            Ext.getCmp('#idLogin button').fireEvent('click');
    }
});


0 commentaires

5 Réponses :


17
votes

Vous devez utiliser la fonction FireEvent code> comme celle-là:

var myBtn = Ext.getCmp('#idLogin button');

myBtn.fireEvent('click', myBtn);


2 commentaires

Merci: D Spot sur et très rapide @!


Pourquoi il n'y a pas de bouton .click () ?



7
votes

Parce que le bouton Cliquez sur l'événement est un événement synthétique tiré par le cadre. Il passe le long de l'instance de bouton et un objet d'événement. FireEvent signifie "Notifier les abonnés que cet événement est arrivé, avec ces arguments", ne pas "déclencher un événement de clic sur le bouton sous-jacent".

Donc, vous devez donc utiliser:

bouton.fireevent ("cliquer sur", bouton);

Cependant, cela n'a pas vraiment de sens, vous n'ajoutez que d'une couche supplémentaire d'indirection.

Pourquoi ne pas abstrait: xxx


5 commentaires

Merci beaucoup pour une réponse détaillée! Indianer a battu à 60 secondes avec un court XD


La réponse est "fausse", vous ne devriez pas tirer un événement sur le bouton. Ce n'est pas la bonne façon de le faire.


Evant, il n'est pas agréable de prendre le "Accepter" de lui XD, mais je suis d'accord que vous êtes allé plus profondément dans la restructuration des fonctions de la meilleure pratique. Vous avez aplatiré les couches. J'aimerais pouvoir vous donner 10 ans et plus! ~


Je ne me soucie pas vraiment de la réponse acceptée, soulignez simplement que vous ne devriez pas utiliser cette approche dans votre propre code.


Comment le faire avec JS natif?



4
votes

Utilisation:

var button= Ext.getCmp('#idLogin button');    
button.fireHandler();


1 commentaires

"FireHandler" est une fonction privée et ne doit pas être invoquée sur: docs.sencha.com/extjs/4.2.2 / #! / API / ...



0
votes

une manière plus générale: xxx

testé sur ExtJS 4.2.6

acclamations


0 commentaires

1
votes

Ceci appellera la fonction de gestionnaire de votre bouton, dans mon cas, cela a fonctionné, du fait que je remplace ce gestionnaire de bouton avec des fonctionnalités et des paramètres supplémentaires changements ... (ExtJS 4.1.1)

Ext.getCmp('#idLogin button').handler();


0 commentaires