- /**
- The ComBroker is lite weight event bus that can be used inside MV* frameworks and offer services for the application.
- Services provided include registration and query of data members, registration and query of
- instances (often registered instances are service providers themselves) and a central location
- for binding and triggering of events.
- @class ComBroker
- @constructor
- @return {Object} instantiated ComBroker
- @example
- <pre>
- Backbone.comBroker = new ComBroker.bus();
- Backbone.comBroker.setService('me',function(i_var){
- alert('I am a service ' + i_var)});
- var g = com.getService('me');
- g("hello again");
- $(com).bind('change',function(e){
- alert('pop ' +e);
- });
- $(Backbone.comBroker).triggerHandler('change');
- example: Backbone.comBroker.fire(loginManager.LOGINBUTTON, this, '#loginButton', "hellow world" );
- example: Backbone.comBroker.listen(loginManager.AUTHENITCATING,loginManager.LOGINBUTTON,function(e){});
- </pre>
- **/
- define(['jquery', 'backbone'], function ($, Backbone) {
-
- Backbone.EVENTS = Backbone.EVENTS ? Backbone.EVENTS : {};
- Backbone.EVENTS.SERVICE_REGISTERED = 'SERVICE_REGISTERED';
-
- var ComBroker = Backbone.Controller.extend({
-
- /**
- Constructor
- @method initialize
- **/
- initialize: function () {
- this.m_services = [];
- Backbone.EVENTS.SERVICE_REGISTERED = 'SERVICE_REGISTERED'
- },
-
- /**
- Register a data member that others can query.
- @method setValue
- @param {String} i_name
- @param {Object} i_value
- @param {Event} i_fireEvent
- @return none
- **/
- setValue: function (i_name, i_value, i_fireEvent) {
- this.m_services[i_name] = i_value;
- if (i_fireEvent)
- this.fire(i_name, this, null, {edata: i_value})
- },
-
- /**
- Get a registered data member.
- @method getValue
- @param {String} i_name
- @return {Object} m_services member
- **/
- getValue: function (i_name) {
- if (this.m_services[i_name]) {
- return this.m_services[i_name]
- } else {
- return undefined;
- }
- },
-
- getFramework: function(){
- var self = this;
- return window.BB;
- },
-
- /**
- Register a service that others can query.
- @method setService
- @param {String} i_name
- @param {Object} i_service
- @return none
- **/
- setService: function (i_name, i_service) {
- this.m_services[i_name] = i_service;
- this.fire(Backbone.EVENTS['SERVICE_REGISTERED'], this, null, {name: i_name, service: i_service})
- },
-
- /**
- Get a registered service.
- @method getService
- @param {String} i_name
- @return {Object} m_services member
- **/
- getService: function (i_name) {
- if (i_name == undefined) {
- //log('cant get set undefined service ' + i_name);
- return undefined;
- }
- if (this.m_services[i_name]) {
- return this.m_services[i_name]
- } else {
- return undefined;
- }
- },
-
- /**
- Expose all services and data members.
- @method getAllServices
- @return {Object} m_services
- **/
- getAllServices: function () {
- return this.m_services;
- },
-
- /**
- Clear all current registered services
- @method clearServices
- **/
- clearServices: function () {
- var self = this;
- // delete self.m_services;
- self.m_services = undefined;
- },
-
- /**
- Trigger an event within the context of the CommBroker thus reducing DOM capture / bubble.
- @method fire
- @param {Event} i_event
- @param {Event} i_context
- @param {Event} i_caller
- @param {Event} i_data
- @return none
- **/
- fire: function (i_event, i_context, i_caller, i_data) {
- $(this).trigger(this.event(i_event, i_context, i_caller, i_data));
- },
-
- /**
- Listen to events within the context of the CommBroker thus reducing DOM capture / bubble.
- Once the even is triggered func will get called back.
- @method listen
- @param {Event} events
- @param {Function} func
- @return none
- **/
- listen: function (events, func) {
- if (arguments.length > 2) {
- var totalArgs = Number([arguments.length - 1]);
- var events = $(arguments).splice(0, totalArgs);
- var func = arguments[totalArgs]
-
- for (var i = 0; i < events.length; i++) {
- events[i] = "'" + events[i] + "'";
- }
- events = events.join(',');
- return $(this).bind(eval(events), func);
- } else {
- return $(this).bind(events, func);
- }
- },
-
- /**
- Listen to events within the context of the CommBroker thus reducing DOM capture / bubble.
- However we only listen within the namespace of a unique context id so we can remove it
- later for a specific listener instance.
- @method listenWithNamespace
- @param {Event} events
- @param {Object} caller
- @param {Function} call back
- @return none
- **/
- listenWithNamespace: function (event, caller, func) {
- if (caller.eventNamespace == undefined)
- caller.eventNamespace = _.uniqueId();
- var namespacEvent = event + '.' + caller.eventNamespace;
- $(this).bind(namespacEvent, func);
- },
-
- /**
- Stop listening to an event but only within the context of a specific listener instance.
- @method stopListenWithNamespace
- @param {String} event
- @param {Function} func
- @return none
- **/
- stopListenWithNamespace: function (event, caller) {
- var namespacEvent = event + '.' + caller.eventNamespace;
- $(this).unbind(namespacEvent);
- },
-
- /**
- Listen only once to an event and unbind.
- Once the event is triggered func will get called back.
- @method listenOnce
- @param {Event} events
- @param {Function} func
- @return none
- **/
- listenOnce: function (events, func) {
- $(this).one(events, func);
- },
-
- /**
- Stop listening to an event.
- @method stopListen
- @param {Event} events
- @param {Function} func
- @return none
- **/
- stopListen: function (events, func) {
- if (func == false) {
- $(this).unbind(events);
- } else {
- $(this).unbind(events, func);
- }
- },
-
- /**
- The jQuery.Event constructor is exposed and can be used when calling trigger. The new operator is optional.
- @method event
- @param {Event} i_event
- @param {Object} i_context
- @param {Object} i_caller
- @param {Object} i_data
- @return none.
- **/
- event: function (i_event, i_context, i_caller, i_data) {
- return $.Event(i_event, {context: i_context, caller: i_caller, edata: i_data});
- }
- });
-
- return ComBroker;
- });
-
-
-
-