Is there a way to have a static variable in a dojo (1.8) module so that I can retain state?
Example, say I set some value in some/module
require([
'some/module'
], function (module) {
module.setSomeValue(3);
});
.. and then want to retrieve it later
define([
'some/module'
], function(module) {
return {
start: function() {
var x = module.getSomeValue();
}
};
});
A solution that works but seems like a hack,
acompany = window.acompany || {};
acompany.project = acompany.project || {
};
require([
], function() {
var debug = false;
acompany.project.module = {
/* static variables and functions here */
};
});
define([
], function () {
return acompany.project.module;
});
Actually there is always only single instance of AMD module, because (source):
In addition you do not have to provide just factory function, you can provide an object literal as well:
Then somewhere else in your code:
More robust solution includes an instance of
dojo/Stateful, so you canwatchfor changes and define custom setters and getters:Then somewhere else in your code:
See how it works at jsFiddle: http://jsfiddle.net/phusick/fHvZf/. It’s in a single file there, but it will work the same way across the whole application unless you
require.undef(mid)the module.