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



在骨干木偶中,您可以使用触发器和事件进行极为相似的事情:

触发器:

return Marionette.Layout.extend({
    triggers: {
        'click .something': 'view:handleClickSomething'
    },
    initialize: function(){
        this.bindTo(this, 'view:handleClickSomething', this.handleClickSomething);
    },
    handleClickSomething: function(){}
}

vs。事件:

return Marionette.Layout.extend({
    events: {
        'click .something': 'view:handleClickSomething'
    },
    handleClickSomething: function(ev){}
}

事件的方式似乎是一种更快的方法,并且也使得在实际事件本身中更容易(因为它是自动传递的)。有理由使用另一个吗?他们的预期用例是什么?在网上找到很多有关此信息的信息很难(除了试图掌握带注释的来源)...

(我只是发现了事件方法,到现在为止一直在使用触发器,因为我认为这是唯一的方法)

您的第一个示例是触发器的不良使用。触发器本来是从视图触发事件的捷径,以便外部对象可以捕获事件,而不是触发事件的视图。

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

如果我们认为 eventstriggers是javascript对象,那么这就是区别:

事件示例:

events: {
    'click hi': 'alertTitle',
},
alertTitle: function () {
    alert('Title!!');
}

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

触发示例:

triggers: {
    'click h1': 'alert:title'
},

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

触发器在:

时很有帮助
  1. 您希望您的DOM事件发射木偶事件,而不是调用回调函数;
  2. 您希望您的木偶事件的处理程序在当前视图之外,例如其父视图。在这种情况下,此视图的父可以具有onChildviewAlertTitle()功能来处理此alert:title事件。

最新更新