【问题标题】:What is the difference between triggers and events in backbone?主干中的触发器和事件有什么区别?
【发布时间】:2012-10-18 22:50:58
【问题描述】:

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

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

(我才刚刚发现 events 方法,直到现在一直使用触发器,因为我认为这是唯一的方法)

【问题讨论】:

    标签: javascript backbone.js marionette


    【解决方案1】:

    如果我们将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 事件。

    【讨论】:

    • 我知道,alert:title 触发器总是触发 onAlertTitle 方法(大写并添加“on”前缀)。这意味着triggers 不仅将事件暴露给父视图,而且还尝试执行自己的mentod。而相反的方式 - events: {'click hi': 'alert:title'} - 也会这样做。
    【解决方案2】:

    您的第一个示例是触发器使用不当。触发器旨在作为从视图触发事件的快捷方式,以便外部对象可以捕获事件,而不是触发事件的视图。

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

    【讨论】:

    • 这似乎并没有真正回答所提出的问题,例如,“触发器是___,而事件是___。”我很清楚触发器会触发事件,但事件也可以,所以这个答案没有澄清任何事情。
    猜你喜欢
    • 2020-11-11
    • 1970-01-01
    • 2011-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-15
    相关资源
    最近更新 更多