是否有一个经验法则来决定何时在Backbone.Marionette中使用trigger或triggerMethod?

时间:2014-01-10 18:45:35

标签: javascript backbone.js marionette

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

特别是,有什么经验法则可以决定何时使用前者或后者?

例如,在我看来,事件对于DOM元素及其视图之间的通信非常有用。

在Marionette中使用

triggerMethod来更新级联的不同组件,例如:布局将show方法调用给其子级(子级响应onShow)。所以,对我而言,与调用直接方法相同。这是真的吗?

trigger怎么样?

提前谢谢你。

2 个答案:

答案 0 :(得分:12)

没有太大的区别,它只取决于你想做什么......

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

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

那么为什么要使用triggerMethod呢?因为它为您提供了“钩子”来添加事件侦听器的功能。例如,在我的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为我们提供了一个“钩子”供以后使用。例如,假设我想添加用户错误的记录:我可以简单地在我的视图中添加一个监听器:

initialize: function(){
  this.on("form:data:invalid", function(validationError){
    // log error here
  }
}

可以添加此附加功能而不会影响其余代码,因为我们使用triggerMethod而不是直接方法调用。此外,以后测试更容易(小测试,单点故障):

  • 测试当用户输入错误信息时触发“form:data:invalid”事件
  • 测试当触发“form:data:invalid”事件时,会记录错误

答案 1 :(得分:8)

trigger(name)

  • Backbone.js
  • 的一部分
  • 使用
  • 中传递的名称触发事件

triggerMethod(name)

  • Marionnete.js
  • 的一部分
  • trigger(name)所做的一切
  • 还使用预定义的命名约定调用方法。

    例如。 triggerMethod('foo')会致电onFoo()

    例如。 triggerMethod('foo:bar')会致电onFooBar()