rrylee
1/7/2016 - 1:38 PM

JavaScript Observer pattern -- es5

JavaScript Observer pattern -- es5

define(function() {
    var subscribers = {};

    function subscribe (type, fn) {
        if (! subscribers[type]) {
            subscribers[type] = [];
        }
        if (subscribers[type].indexOf(fn) == -1) {
            subscribers[type].push(fn);
        }
    }

    function unsubscribe (type, fn) {
        var listeners = subscribers[type];

        if (! listeners) return;

        var index = listeners.indexOf(fn);

        if (index > -1) {
            listeners.splice(index, 1);
        }
    }

    function publish (type, e) {
        if (! subscribers[type]) return;

        if (! e.type) {
            e.type = type;
        }

        var listeners = subscribers[type];

        for (var i = 0, length = listeners.length; i < length; i ++) {
            console.log(listeners[i]);
            listeners[i](e);
        }
    }

    return {
        subscribe: subscribe,
        unsubscribe: unsubscribe,
        publish: publish
    };
});