J'ai les événements suivants pour une vue de réseau fédérateur. C'est une vue du 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
}
Vous pouvez plutôt 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 puis 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)
// ...
}
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
}
Ce que vous pouvez faire, c'est simplement 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
}
Vous pouvez le faire en utilisant des fermetures:
EventObject.on(event, (function(){
var arg = data; // Closure preserves this data
return function(){
doThis(arg);
}
})());