There isn't a huge difference, and it simply depends on what you want to do...
Obviously, if you only want to trigger an event, you'd use trigger
. But using trigger
you also create a "home made" triggerMethod implementation: trigger
the event, then have a listener that will call the function you want.
So what about triggerMethod
? As mentioned above, it will trigger an event and call a method. So if your only objective is to call the method in the first place, there isn't necessarily a need for using triggerMethod
.
So why would one use triggerMethod
at all? Because it gives you "hooks" to add functionality with event listeners. In my book on Marionette, for example, there is a triggerMethod
call in https://github.com/davidsulc/marionette-gentle-introduction/blob/master/assets/js/apps/contacts/edit/edit_controller.js#L24 to display error messages on a form. The same could be achieved by simply calling
view.onFormDataInvalid(contact.validationError);
But as mentioned above, triggerMethod
give us a "hook" for later use. For example, let's say I want to add logging of user errors: I can simply add a listener to my view:
initialize: function(){
this.on("form:data:invalid", function(validationError){
// log error here
}
}
This additonal functionality can be added without impacting the rest of the code, because we've used triggerMethod
instead of a direct method call. In addition, it will be easier to test later (small tests, with single point of failure):
- test that "form:data:invalid" event is triggered when a user enters incorrect info
- test that when "form:data:invalid" event is triggered, error gets logged
- etc.
triggerMethod
instead oftrigger
. But in both cases the view will respond to them is the same of the one I send that message to. True? With an exception for collection views that are able to forward events. P.S. I've already your books. ;-) – Giuseppinagiustina