The documentation for Marionette.Controller says that it is "a multi-purpose object to use as a controller for modules and routers". However, I see that in many cases people do not use the Marionette.Controller with their routers. For example, David Sulc uses a plain old object called API in his book:
ContactsAppRouter.Router = Marionette.AppRouter.extend({
appRoutes: {
"contacts(/filter/criterion::criterion)": "listContacts",
"contacts/:id": "showContact",
"contacts/:id/edit": "editContact"
}
});
var API = {
listContacts: function(criterion){
require(["apps/contacts/list/list_controller"], function(ListController){
executeAction(ListController.listContacts, criterion);
});
},
...
};
ContactManager.addInitializer(function(){
new ContactsAppRouter.Router({
controller: API
});
});
Is this purely a matter of taste or is there a specific advantage to this pattern?
A followup question: What is a good use case for using a Marionette Controller over a pure JavaScript object? I have not yet found a compeling example.