我正在使用Backbone.jsBackbone.Marionette玩一点,我想知道triggertriggerMethod之间有什么区别。

特别是,是否有任何经验法则来决定何时使用前者或后者?

在我看来,例如,事件对于在DOM元素及其 View 之间进行通信很有用。

在Marionette中使用triggerMethod来级联更新不同的组件,例如布局对其子代调用show方法(子代响应onShow)。因此,对我来说,这与在其上调用直接方法相同。这是真的?

trigger呢?

预先谢谢你。

最佳答案

并没有很大的区别,它仅取决于您要执行的操作...

  • trigger将触发事件
  • triggerMethod将触发一个事件并根据命名约定(请参阅https://marionettejs.com/docs/v2.1.0/marionette.functions.html#marionettetriggermethod)调用相应的方法

  • 显然,如果只想触发事件,则可以使用trigger。但是,使用trigger还可以创建“自制” triggerMethod实现:trigger事件,然后有一个监听器将调用所需的函数。

    那么triggerMethod呢?如上所述,它将触发一个事件并调用一个方法。因此,如果您的唯一目标是首先调用该方法,则不一定需要使用triggerMethod

    那么,为什么一个人完全使用triggerMethod?因为它给您“钩子(Hook)”以添加事件监听器的功能。例如,在我的book on Marionette中,https://github.com/davidsulc/marionette-gentle-introduction/blob/master/assets/js/apps/contacts/edit/edit_controller.js#L24中有一个triggerMethod调用,用于在表单上显示错误消息。只需调用即可达到相同的目的
    view.onFormDataInvalid(contact.validationError);
    

    但是如上所述,triggerMethod给了我们一个“钩子(Hook)”,供以后使用。例如,假设我想添加用户错误的日志记录:我可以简单地向我的 View 添加一个监听器:
    initialize: function(){
      this.on("form:data:invalid", function(validationError){
        // log error here
      }
    }
    

    可以添加此附加功能,而不会影响其余代码,因为我们使用了triggerMethod而不是直接方法调用。此外,以后进行测试(较小的测试,具有单点故障)将更容易:
  • 测试用户输入不正确的信息时会触发“form:data:invalid”事件
  • 测试当触发“form:data:invalid”事件时,会记录错误
  • 等。
  • 09-27 21:48