Javascript 主干中的触发器和事件之间有什么区别?

Javascript 主干中的触发器和事件之间有什么区别?,javascript,backbone.js,marionette,Javascript,Backbone.js,Marionette,在主干木偶中,您可以使用触发器和事件执行极其相似的操作: 触发因素: return Marionette.Layout.extend({ triggers: { 'click .something': 'view:handleClickSomething' }, initialize: function(){ this.bindTo(this, 'view:handleClickSomething', this.handleClickSo

在主干木偶中,您可以使用触发器和事件执行极其相似的操作:

触发因素:

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方法,到目前为止,我一直在使用触发器,因为我认为这是唯一的方法)

您的第一个示例是触发器的错误使用。触发器是从视图触发事件的快捷方式,因此外部对象可以捕获事件,而不是触发事件的视图


如果我们认为
事件和
触发器都是Javascript对象,那么区别在于:

事件示例:

在每个事件中,键(
'click h1'
)始终是DOM事件和jQuery选择器,值(
'alertTitle'
)始终是回调函数的名称,存在于视图中。

触发示例:

在每个触发器中,键仍然是一个DOM事件和一个jQuery选择器,但值(
'alert:title'
)始终是要触发的新事件的名称。
该事件处理程序可以在任何地方定义,不一定在当前视图中

触发器在以下情况下很有用:

  • 您希望DOM事件触发一个木偶事件,而不是调用回调函数
  • 您希望木偶事件的处理程序位于当前视图之外的某个位置,例如其父视图。在这种情况下,此视图的父视图可以使用
    onChildviewAlertTitle()
    函数来处理此
    alert:title
    事件

  • 这似乎并没有真正回答所问的问题,例如,“触发器是,而事件是。”我很清楚,触发器触发事件,但事件也可以触发,所以这个答案没有澄清任何问题。我认识到,
    警报:title
    触发器总是触发
    onalertitle
    方法(大写并添加“on”前缀)。这意味着,
    触发器不仅向父视图公开事件,而且还尝试执行自己的mentod。而oppozite方式-
    事件:{'click hi':'alert:title'}
    -也会这样做。
    events: {
        'click hi': 'alertTitle',
    },
    
    alertTitle: function () {
        alert('Title!!');
    }
    
    triggers: {
        'click h1': 'alert:title'
    },