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

1cklez4t  于 2022-11-10  发布在  其他
关注(0)|答案(2)|浏览(132)

我玩了一下Backbone.jsBackbone.Marionette,我想知道triggertriggerMethod之间的区别。
特别是,有没有经验法则来决定何时使用前者或后者?
例如,在我看来,事件对于DOM元素和它的视图之间的通信是很有用的。
triggerMethod在Marionette中用于级联更新不同的组件,例如,一个布局调用show方法给它的子级(子级响应onShow)。因此,对我来说,这与在它上面调用直接方法是一样的。这是真的吗?
那么trigger呢?
先谢谢你了。

dkqlctbz

dkqlctbz1#

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

  • trigger将触发事件
  • triggerMethod将触发事件 * 并 * 根据命名惯例呼叫Map的方法(请参阅https://marionettejs.com/docs/v2.1.0/marionette.functions.html#marionettetriggermethod)

显然,如果你只想触发一个事件,你可以使用trigger,但是使用trigger你也可以创建一个“自制的”triggerMethod实现:trigger事件,然后有一个侦听器来调用您想要的函数。
那么triggerMethod呢?如上所述,它将触发一个事件并调用一个方法。因此,如果您的唯一目标是首先调用该方法,则不一定需要使用triggerMethod
那么,为什么要使用triggerMethod呢?因为它提供了“钩子”来添加带有事件侦听器的功能。例如,在我的book on Marionette中,www.example.com中有一个triggerMethod调用https://github.com/davidsulc/marionette-gentle-introduction/blob/master/assets/js/apps/contacts/edit/edit_controller.js#L24用于在表单上显示错误消息。通过简单地调用

view.onFormDataInvalid(contact.validationError);

但是如上所述,triggerMethod为我们提供了一个“钩子”供以后使用。例如,假设我想添加用户错误的日志记录:我只需在视图中添加一个侦听器:

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

这个额外的功能可以在不影响其余代码的情况下添加,因为我们使用了triggerMethod而不是直接的方法调用。此外,它将更容易在以后进行测试(小测试,单点故障):

  • 测试当用户输入错误信息时,是否触发“表单:数据:无效”事件
  • 测试当触发“表格:数据:无效”事件时,记录错误
  • 等等。
fxnxkyjh

fxnxkyjh2#

x1月0n1x日

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

triggerMethod(name)

  • Marionnete.js的一部分
  • 具备trigger(name)的所有功能
  • 也会使用预先定义的命名惯例呼叫方法。

例如,triggerMethod('foo')将调用onFoo()
例如,triggerMethod('foo:bar')将调用onFooBar()

相关问题