39 votes

Passage de paramètres dans l'objet Evénements Backbone d'une vue Backbone

J'ai les événements suivants pour une vue de colonne vertébrale. C'est une vue produit - avec trois onglets ("Tous", "Top 3", "Top 5")

Puis-je en quelque sorte passer un paramètre dans la déclaration de méthode afin qu'il 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
    }
 

66voto

mu is too short Points 205090

Vous pouvez placer l'argument supplémentaire dans un attribut de données sur l'élément cliquable; quelque chose comme ça:

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

Et alors topProducts peut le comprendre lui-même:

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

22voto

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
}
 

4voto

blunderboy Points 5137

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

 topProduct: function(e) {
    console.log(arguments[0].currentTarget.id);
    var id = arguments[0].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: