我正在使用Backbone.js
和Backbone.Marionette
玩一点,我想知道trigger
和triggerMethod
之间有什么区别。
特别是,是否有任何经验法则来决定何时使用前者或后者?
在我看来,例如,事件对于在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
而不是直接方法调用。此外,以后进行测试(较小的测试,具有单点故障)将更容易: