繁体   English   中英

骨干网中的触发器和事件有什么区别?

[英]What is the difference between triggers and events in backbone?

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

事件方式似乎是一种更快捷的方式,也使得更容易获得实际事件本身(因为它是自动传递的)。 是否有理由使用其中一个? 他们的预期用例是什么? 无法在线查找有关此内容的详细信息(除了尝试浏览带注释的源代码外)...

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

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

http://lostechies.com/derickbailey/2012/05/15/workflow-in-backbone-apps-triggering-view-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事件触发Marionette事件,而不是调用回调函数;
  2. 您希望Marionette事件的处理程序位于当前视图之外的某个位置,例如其父视图。 在这种情况下,此视图的父级可以使用onChildviewAlertTitle()函数来处理此alert:title事件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM