我正在玩一点Backbone.js
and Backbone.Marionette
我想知道两者之间有什么区别trigger
and triggerMethod
.
特别是,是否有任何经验法则可以决定何时使用前者或后者?
例如,在我看来,事件对于 DOM 元素与其视图之间的通信非常有用。
triggerMethod
在 Marionette 中用于级联不同组件的更新,例如布局调用show
方法给它的孩子们(孩子们回应onShow
)。所以,对我来说,这与调用直接方法相同。这是真的?
关于什么trigger
?
预先感谢您。
没有太大的区别,这只是取决于你想做什么......
-
trigger
会触发一个事件
-
triggerMethod
会触发一个事件AND根据命名约定调用相应的方法(参见https://marionettejs.com/docs/v2.1.0/marionette.functions.html#marionettetriggermethod https://marionettejs.com/docs/v2.1.0/marionette.functions.html#marionettetriggermethod)
显然,如果你只想触发一个事件,你可以使用trigger
。但使用trigger
您还创建了一个“自制”triggerMethod 实现:trigger
事件,然后有一个侦听器来调用您想要的函数。
那么呢triggerMethod
?如上所述,它会触发一个事件并调用一个方法。因此,如果您的唯一目标是首先调用该方法,则不一定需要使用triggerMethod
.
那么为什么要使用triggerMethod
根本吗?因为它为您提供了“钩子”来添加事件侦听器的功能。在我的关于木偶的书 https://leanpub.com/marionette-gentle-introduction/,例如,有一个triggerMethod
打电话进来https://github.com/davidsulc/marionette-gentle-introduction/blob/master/assets/js/apps/contacts/edit/edit_controller.js#L24 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
而不是直接方法调用。另外,以后测试会更容易(小测试,有单点故障):
- 测试当用户输入错误信息时是否触发“form:data:invalid”事件
- 测试当触发“form:data:invalid”事件时,记录错误
- etc.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)