3 votes

Quelle est la manière correcte de passer un paramètre d'événement dans DOJO ?

Je travaille sur Dojo Version 1.8. J'ai conçu un widget personnalisé comme ci-dessous. C'est un extrait

<div>
    <div>
         <input 
             id ="NZ1",
             data-dojo-attch-point = "NZ1"
             data-dojo-attch-type = "ecm.widget.ValidationTextBox"
             data-dojo-attch-event = "onBlur : makeAllSmall"
         />
    </div>
    <div>
         <input 
             id ="NZ2",
             data-dojo-attch-point = "NZ2"
             data-dojo-attch-type = "ecm.widget.ValidationTextBox"
             data-dojo-attch-event = "onBlur: makeAllSmall"
         />
    </div>
</div> 

Voici le gestionnaire d'événement

makeAllSmall : function(evt){  
    var currVal=evt.target.value;
    currVal = currVal.toLowerCase();
    /**Some Other business logic on currVal **/
}

Ce site evt est toujours considéré comme indéfini. Je suis assez nouveau dans Dojo. Est-ce qu'il me manque quelque chose du côté du HTML ? J'ai essayé de changer le HTML comme ci-dessous mais sans succès.

         <input 
             id ="NZ2",
             data-dojo-attch-point = "NZ2"
             data-dojo-attch-type = "ecm.widget.ValidationTextBox"
             data-dojo-attch-event = "onBlur : makeAllSmall"
             data-dojo-args="e"
         />

1voto

Tout d'abord, y a-t-il une faute de frappe dans la méthode "onBlurr" ? Je vois qu'il y a un 'r' supplémentaire. Ça ne devrait pas être "onBlur" ?

Si vous regardez la documentation de l'API DOJO pour l'événement onBlur, il ne passe pas un objet d'événement comme ce que vous attendez.

onBlur()
Defined by: dijit/_FocusMixin

Called when the widget stops being "active" because focus moved to something outside of it, or the user clicked somewhere outside of it, or the widget was hidden.
Examples
Example 1
var btn = new Button();
// when /my/topic is published, this button changes its label to
// be the parameter of the topic.
btn.subscribe("/my/topic", function(v){
this.set("label", v);
});

Ensuite, dans votre gestionnaire d'événement, vous essayez de changer le texte en minuscules, ce qui peut être fait comme suit

makeAllSmall : function(){  
    var currVal=this.get("value");
    currVal = currVal.toLowerCase();
    /**Some Other business logic on currVal **/
}

Une autre façon de procéder sans le gestionnaire d'événements est de forcer l'utilisation de l'option ValidationTextBox pour tout convertir en minuscules en utilisant des paramètres de construction comme

<input 
             id ="NZ2",
             data-dojo-attach-point = "NZ2"
             data-dojo-attach-type = "ecm.widget.ValidationTextBox"
            data-dojo-props='lowercase:true'
             data-dojo-attach-event = "onBlurr : makeAllSmall"
         />

Notez que j'ai ajouté data-dojo-props='lowercase:true'

J'espère que cela vous aidera.

0voto

GibboK Points 9196

Vous devriez être en mesure d'attacher un événement DOM à votre widget personnalisé par :

  • Utilisation de l'attribut de données data-dojo-attach-event dans le balisage.
  • Et en utilisant _AttachMixin en passant votre fonction callBack.

Exemple :


<div id="somenode"><span data-dojo-attach-point="anattachpoint"
     data-dojo-attach-event="click: clicked">Click me</span></div>

var MyDijit = declare([ _WidgetBase, _AttachMixin ], {
    // .. declaration goes here ..
    clicked: function(e) {
        // handle event
    }
});
// instantiate the dijit instance, which will attach to the 'somenode' div.
var mydijit = new MyDijit({}, dom.byId('somenode'));
mydijit.startup();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X