A decoupled, event-driven architecture on top of Backbone.js for developing widget-based applications