Hi,
I have quite a few calls like this in my JavaScript:
dojo.connect(map, "onLoad", {map: map, do:buildScalebar}, "do");
and I would like to simplify to something like this:
var scalebar = buildScalebar({ map: map });
// the retuned value should be the scale bar widget so I could do:
scalebar.hide();
scalebar.show(); // and so on
What is the best way to do it?
Here is the buildScalebar function from the second case, which however returns null.
function buildScalebar(opts){
/* Build the scalebar widget with options:
* .map -- map for which to load the scalebar
* .unit -- scalebarUnit, dual|metric|english, default is "dual"
* .anchor -- top-right|bottom-right|top-center|bottom-center|bottom-left|top-left, default value is "bottom-left"
*
* Returns the widget. (BUT IT DOESN'T!!!)
*/
var o = this;
if ('map' in opts) { o = opts; }
var map = opts.map;
var anchor = 'anchor' in opts ? opts.anchor : "bottom-left";
var unit = 'unit' in opts ? opts.unit : "dual";
var scalebar = null;
dojo.connect(map, "onLoad", {
"map": map,
"attachTo": anchor,
"scalebarUnit": unit,
"do": function () {
var options = {"map": this.map, "attachTo": this.attachTo, "scalebarUnit": this.scalebarUnit }
scalebar = new esri.dijit.Scalebar( options );
}
}, "do");
return scalebar;
}
I would like to use this pattern for other widgets and functionality, not just the scale bar widget.
Is it a good idea? Do I need some kind of Deferreds here? Can you help me with an example?
Cheers,
Filip.