52 votes

Passage de paramètres dans l'objet Backbone events d'une vue Backbone

J'ai les événements suivants pour une vue Backbone. Il s'agit d'une vue de produits, avec trois onglets ("Tous", "Top 3", "Top 5").

Puis-je, d'une manière ou d'une autre, passer un paramètre dans la déclaration de la méthode de façon à ce que cela soit équivalent à ce qui suit (cela ne fonctionne pas) ?

events : {
    "click #top-all":          "topProducts(1)"
    "click #top-three":      "topProducts(2)"
    "click #top-ten":         "topProducts(3)"
},
topProducts(obj){
    // Do stuff based on obj value
}

80voto

mu is too short Points 205090

Vous pourriez mettre l'argument supplémentaire dans un attribut de données sur l'élément cliquable à la place ; quelque chose comme ceci :

<a id="top-all" data-pancakes="1">

Et puis topProducts peut le découvrir lui-même :

topProducts: function(ev) {
    var pancakes = $(ev.currentTarget).data('pancakes');
    // And continue on as though we were called as topProducts(pancakes)
    // ...
}

38voto

Dre Points 1

Je préfère généralement faire quelque chose comme ça :

events : {
   "click #top-all":    function(){this.topProducts(1);}
   "click #top-three":  function(){this.topProducts(2);}
   "click #top-ten":    function(){this.topProducts(3);}
},
topProducts(obj){
   // Do stuff based on obj value
}

9voto

blunderboy Points 5137

Ce que vous pouvez faire, c'est vérifier l'id de l'élément qui est reçu comme currentTarget dans les arguments.

topProduct: function (e) {
    var id = e.currentTarget.id;
    if (id == "top-all") // Do something
    else if (id == "top-5") // Do something
    else if (id == "top-3") // Do something
}

3voto

Vous pouvez le faire en utilisant des fermetures :

EventObject.on(event, (function(){
    var arg = data; // Closure preserves this data
    return function(){
        doThis(arg);
    }   
})());

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