Подтвердить что ты не робот

Передача параметров в объект событий базовой линии представления базовой линии

У меня есть следующие события для 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
}
4b9b3361

Ответ 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);
    }   
})());