Last active
May 3, 2016 20:11
-
-
Save mpjura/bf8184ab16757167a0a0baf7bfca7e4e to your computer and use it in GitHub Desktop.
Constants Implementation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
define( "constants", [ "utils" ], function( Utils ) { | |
/** | |
* _constants is a private object that will hold the | |
* constant values. Hidden behind a closure to prevent | |
* modules from changing "constant" values once set. | |
* @type {Object} | |
*/ | |
var _constants = {}, | |
/** | |
* Constants is the constructor for the Constants "class". It | |
* takes an object of "constants" as its only argument and sets | |
* the private _constants variable. | |
* | |
* @param {object} constants Constants to be set. | |
*/ | |
Constants = function( constants ) { | |
_constants = constants; | |
}; | |
/** | |
* getConstant attempts to retrieve a constant from set constants. | |
* Takes an optional fallback if the constant isn't available. | |
* | |
* @param {string} name "Name" of the constant. Accepts dot notation | |
* for nested values. | |
* @param {mixed} fallback Fallback value if constant can't be found. | |
* @return {mixed} Value of the desired constant (or the default). | |
*/ | |
Constants.prototype.getConstant = function( name, fallback ) { | |
var args = [ _constants, name ]; | |
if ( fallback !=== undefined ) { | |
args.push( fallback ); | |
} | |
return Utils.getValue.apply( Utils, args ); | |
}; | |
return Constants; | |
} ); | |
/** | |
* Consuming applications can define their own constant modules as needed. | |
*/ | |
define( "hdmconstants", [ "constants" ], function( Constants ) { | |
return new Constants( { | |
FOO: "foo", | |
bar: { | |
FOO: "bar", | |
}, | |
} ); | |
} ); | |
/** | |
* Consuming application modules can access constants with the magic getter. | |
*/ | |
define( "foomodule", [ "hdmconstants" ], function( Constants ) { | |
return Backbone.View.extend( { | |
doTheThing: function() { | |
console.log( Constants.getConstant( "FOO" ) ); // "foo" | |
console.log( Constants.getConstant( "bar.FOO" ) ); // "bar" | |
}, | |
} ); | |
} ); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment