cmc*_*loh 15 javascript backbone.js marionette
在Backbone Marionette中,您可以使用触发器和事件执行非常类似的操作:
触发:
return Marionette.Layout.extend({
triggers: {
'click .something': 'view:handleClickSomething'
},
initialize: function(){
this.bindTo(this, 'view:handleClickSomething', this.handleClickSomething);
},
handleClickSomething: function(){}
}
Run Code Online (Sandbox Code Playgroud)
与事件:
return Marionette.Layout.extend({
events: {
'click .something': 'view:handleClickSomething'
},
handleClickSomething: function(ev){}
}
Run Code Online (Sandbox Code Playgroud)
事件方式似乎是一种更快捷的方式,也使得更容易获得实际事件本身(因为它是自动传递的).是否有理由使用其中一个?他们的预期用例是什么?无法在线查找有关此内容的详细信息(除了尝试浏览带注释的源代码外)...
(我刚刚发现了事件方法,到目前为止一直在使用触发器,因为我认为这是唯一的方法)
Der*_*ley 15
你的第一个例子就是使用触发器.触发器是用于从视图触发事件的快捷方式,因此外部对象可以捕获事件,而不是触发事件的视图.
小智 5
如果我们将events和 都triggers视为 Javascript 对象,那么区别就在这里:
事件示例:
events: {
'click hi': 'alertTitle',
},
alertTitle: function () {
alert('Title!!');
}
Run Code Online (Sandbox Code Playgroud)
在每个事件中,键 ( 'click h1') 始终是 DOM 事件和 jQuery 选择器,值 ( 'alertTitle') 始终是回调函数的名称,存在于视图中。
触发示例:
triggers: {
'click h1': 'alert:title'
},
Run Code Online (Sandbox Code Playgroud)
在每个触发器中,键仍然是一个 DOM 事件和一个 jQuery 选择器,但值 ( 'alert:title') 始终是您要触发的新事件的名称。该事件处理程序可以在任何地方定义,不一定在当前视图中。
触发器在以下情况下很有帮助:
onChildviewAlertTitle()处理此alert:title事件的功能。