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

Lor*_*o B 9 javascript backbone.js marionette

我正在玩一点,Backbone.js而且Backbone.Marionette我想知道trigger和之间有什么区别triggerMethod.

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

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

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

怎么样trigger?

提前谢谢你.

Dav*_*ulc 12

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

显然,如果你只想触发一个事件,你就可以使用了trigger.但是使用trigger你还可以创建一个"自制"triggerMethod实现:trigger事件,然后有一个监听器,它将调用你想要的功能.

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

那为什么一个人会用triggerMethod呢?因为它为您提供了"钩子"来添加事件侦听器的功能.在我的书的木偶,例如,有一个triggerMethod呼叫https://github.com/davidsulc/marionette-gentle-introduction/blob/master/assets/js/apps/contacts/edit/edit_controller.js#L24到在表单上显示错误消息.通过简单地呼叫也可以实现同样的目的

view.onFormDataInvalid(contact.validationError);
Run Code Online (Sandbox Code Playgroud)

但如上所述,triggerMethod给我们一个"钩子"供以后使用.例如,假设我想添加用户错误的记录:我只需在我的视图中添加一个监听器:

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

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

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


kay*_*one 8

trigger(name)

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

triggerMethod(name)

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

    例如.triggerMethod('foo')将会通知onFoo()

    例如.triggerMethod('foo:bar')将会通知onFooBar()