Передача параметров в объект событий базовой линии представления базовой линии
У меня есть следующие события для Backbone View. Его вид продукта - с тремя вкладками ( "Все", "Топ-3", "Топ-5" )
Могу ли я каким-то образом передать параметр в объявление метода, чтобы он был эквивалентен следующему (это не работает)?
events : {
"click #top-all": "topProducts(1)"
"click #top-three": "topProducts(2)"
"click #top-ten": "topProducts(3)"
},
topProducts(obj){
// Do stuff based on obj value
}
Ответы
Ответ 1
Вместо этого вы можете поместить дополнительный аргумент в атрибут данных на элемент, который можно щелкнуть; что-то вроде этого:
<a id="top-all" data-pancakes="1">
И тогда topProducts
может сам понять:
topProducts: function(ev) {
var pancakes = $(ev.currentTarget).data('pancakes');
// And continue on as though we were called as topProducts(pancakes)
// ...
}
Ответ 2
Обычно я предпочитаю делать что-то вроде этого:
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
}
Ответ 3
Что вы можете сделать, просто проверьте идентификатор элемента, который был получен как currentTarget в аргументах.
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
}
Ответ 4
Вы можете сделать это с помощью закрытий:
EventObject.on(event, (function(){
var arg = data; // Closure preserves this data
return function(){
doThis(arg);
}
})());