I wrote this helper:
export default class EventsHelper { static triggerNamespacedEvent(eventBus, event, args) { event.split(':').reduce((previous, current) => { eventBus.trigger(previous, current); return `${previous}:${current}`; }); eventBus.trigger(event, args); } }
To use this in your view, you must:
actionOne(argsOne){ EventsHelper.triggerNamespacedEvent(this, 'click:chart:one', argsOne); } actionTwo(argsTwo){ EventsHelper.triggerNamespacedEvent(this, 'click:chart:two', argsTwo); }
To listen to these events, you will do:
//Listen for all clicks this.listenTo(view, 'click', (args) => { console.log(`clicked something: ${args}`); //output: clicked something: chart }); //Listen for all chart clicks this.listenTo(view, 'click:chart', (args) => { console.log(`clicked chart: ${args}`); //output: clicked chart: one }); //Listen for fully qualified event this.listenTo(view, 'click:chart:two', (args) => { console.log(`clicked chart two: ${args}`); //output: clicked chart two: evtArgs });
Vern
source share