A simple class for allowing c# style events in js:
functionSomeClass(){this.someEvent=newEventJs.EventHandler(this);this.publishEvent=function(){this.someEvent.publish("hello");}}varsomeInstance=newSomeClass();someInstance.someEvent.subscribe(function(args,sender){alert(args);});someInstance.publishEvent();// Would alert "hello"IF you are using Node then you should be able to just do:
var EventHandler = require("event-handler");
If you want to use it in the browser without a module loader then grab the event.js file in dist/browser
it will self register the EventJs global for you to access the event handler.
var EventHandler = EventJs.EventHandler;
Either way you will need to new up an instance of it to use it.
var someEvent = new EventHandler(theSenderGoesHere);
So as shown in the above example you can easily subscribe to events with it, subscribe as many listeners as you want to them.
varfunction1=function(args,sender){ ... };varfunction2=function(args,sender){ ... };varfunction3=function(args,sender){ ... };varsomeEvent=newEventHandler(someSender);someEvent.subscribe(function1);someEvent.subscribe(function2);someEvent.subscribe(function3);someEvent.publish(something);You can also add predicates to only subscribe based upon arguments:
varonlyWhenPredicateMet=function(args){ ... };varpredicate=function(args){returnargs.length<=2;}varsomeEvent=newEventHandler(someSender);someEvent.subscribe(onlyWhenPredicateMet,predicate);someEvent.publish("too long");// subscription wont get triggeredsomeEvent.publish("GO");// predicate returns true and would trigger subscriptionFinally if you want to unsubscribe just do:
varsomeSubscription=function(args){ ... };varsomeEvent=newEventHandler(someSender);someEvent.subscribe(someSubscription);// subscribe itsomeEvent.unsubscribe(someSubscription);// unsubscribe itor if you are living dangerously and end up doing a lot of inline functions you can capture the return unsubscriber token and use that for unsubscribing:
varsomeSubscription=;varsomeEvent=newEventHandler(someSender);varunsubscriber=someEvent.subscribe(function(args){ ... });// subscribe and get unsubscriberunsubscriber();// unsubscribe itIn c# the events tend to put the sender first, however as in most cases you don't care about the sender and JS has optional arguments it made more sense for the args to be the first parameter and then the sender be the last, this makes it more succinct when writing event handlers which do not care about the sender.
Before version 0.0.6 it used to be the other way around, but from this point on it will be as detailed above.