在骨干木偶中,您可以使用触发器和事件进行极为相似的事情:
触发器:
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/
如果我们认为 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事件发射木偶事件,而不是调用回调函数;
- 您希望您的木偶事件的处理程序在当前视图之外,例如其父视图。在这种情况下,此视图的父可以具有
onChildviewAlertTitle()
功能来处理此alert:title
事件。