Ответ 1
Ваш первый пример - плохое использование триггеров. Триггеры предназначены для быстрого вызова для запуска события из представления, так что внешний объект может поймать событие, а не представление, вызвавшее событие.
В Backbone Marionette вы можете делать очень похожие вещи с триггерами и событиями:
триггеры:
return Marionette.Layout.extend({
triggers: {
'click .something': 'view:handleClickSomething'
},
initialize: function(){
this.bindTo(this, 'view:handleClickSomething', this.handleClickSomething);
},
handleClickSomething: function(){}
}
против. События:
return Marionette.Layout.extend({
events: {
'click .something': 'view:handleClickSomething'
},
handleClickSomething: function(ev){}
}
Путь событий кажется более быстрым, а также облегчает доступ к самому фактическому событию (поскольку он передается автоматически). Есть ли причина использовать один над другим? Каковы их предполагаемые варианты использования? У вас возникли проблемы с поиском много информации об этом в Интернете (кроме попыток поиска в аннотированном источнике)...
(Я только что открыл метод событий и до сих пор использовал триггеры для всего, поскольку я думал, что это единственный способ)
Ваш первый пример - плохое использование триггеров. Триггеры предназначены для быстрого вызова для запуска события из представления, так что внешний объект может поймать событие, а не представление, вызвавшее событие.
Если мы считаем, что events
и triggers
как объекты Javascript, то вот разница:
Пример события:
events: {
'click hi': 'alertTitle',
},
alertTitle: function () {
alert('Title!!');
}
В каждом случае ключ ('click h1'
) всегда является событием DOM и селектором jQuery, значением ('alertTitle'
) всегда является именем функции обратного вызова, существующей внутри представления.
Пример триггера:
triggers: {
'click h1': 'alert:title'
},
В каждом триггере ключ по-прежнему является событием DOM и селектором jQuery , но значение ('alert:title'
) всегда является именем нового события, которое вы хотите вызвать. Этот обработчик событий может быть определена где угодно, не обязательно внутри текущего вида.
Триггер полезен, если:
onChildviewAlertTitle()
для обработки этого события alert:title
.