В чем разница между триггерами и событиями в позвоночнике? - программирование

В чем разница между триггерами и событиями в позвоночнике?

В 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){}
}

Путь событий кажется более быстрым, а также облегчает доступ к самому фактическому событию (поскольку он передается автоматически). Есть ли причина использовать один над другим? Каковы их предполагаемые варианты использования? У вас возникли проблемы с поиском много информации об этом в Интернете (кроме попыток поиска в аннотированном источнике)...

(Я только что открыл метод событий и до сих пор использовал триггеры для всего, поскольку я думал, что это единственный способ)

4b9b3361

Ответ 1

Ваш первый пример - плохое использование триггеров. Триггеры предназначены для быстрого вызова для запуска события из представления, так что внешний объект может поймать событие, а не представление, вызвавшее событие.

http://lostechies.com/derickbailey/2012/05/15/workflow-in-backbone-apps-triggering-view-events-from-dom-events/

Ответ 2

Если мы считаем, что 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') всегда является именем нового события, которое вы хотите вызвать. Этот обработчик событий может быть определена где угодно, не обязательно внутри текущего вида.

Триггер полезен, если:

  • Вы хотите, чтобы ваше событие DOM запускало событие Marionette вместо вызова функции обратного вызова;
  • Вы хотите, чтобы ваш обработчик событий Marionette находился где-то за пределами текущего представления, например, его родительского представления. В этом случае этот родитель представления может иметь функцию onChildviewAlertTitle() для обработки этого события alert:title.