I have a map template that I use to display a variety of feature layers and dynamic layers.

I have found a snippet of code to add the legend to my map:

//add the legend
dojo.connect(myMap, 'onLayersAddResult', function (results) {
    var layerInfo = dojo.map(results, function (layer, index) {
        return { layer: layer.layer, title: layer.layer.name };

    if (layerInfo.length > 0) {
        var legendDijit = new esri.dijit.Legend({
            map: myMap,
            layerInfos: layerInfo},

The issue is, I can't figure out how to configure the names of the layers, labels, descriptions, etc. Most of the layers in my service are symbolized by Category, so, I want to be able to display those category names in the Legend.

This is what I want to show..or something like it, but with a category or layer heading

This is what shows up. No heading, just the categorized layer without a title or anything.

Any help would be appreciated.


return { layer: layer.layer, title: layer.layer.name };

the property you are interested in setting is the title and the code you are using currently loops through each individual layer that has been successfully added to set this property using layer.name.

can you confirm that this actually present in the service? what do you see when you set a breakpoint within that loop?

  • i should add that this is only true for FeatureLayers. if you are having trouble with an ArcGISDynamicMapService layer, the approach to solve the problem would be to update the service itself so that server/arcgis/rest/service/myservice/MapServer/Legend displays what you want to see, as that is the resource used by the widget to display symbols. see the description in the api reference of the class for more info [link]developers.arcgis.com/en/javascript/jsapi/legend-amd.html – john gravois Aug 17 '13 at 4:18
  • Thanks, John. I added a breakpoint as you suggested within the loop and yes, the layer.layer.name property has the name of the layer. It just doesn't seem to display in the legend div. – Ruchira Welikala Aug 19 '13 at 14:43
  • 1
    is your service public? either way, can you post a fiddle showing the problem? – john gravois Aug 19 '13 at 15:41
  • please take a look at this screenshot when you get a moment. i.imgur.com/fVn7OTT.png The watchlist on the left shows that title field is indeed getting populated. I can't for the life of me figure out why that portion of text won't show up in the legend itself. Could it be the CSS? – Ruchira Welikala Aug 19 '13 at 19:50
  • 1
    i guess its possible. i used the inspector in Chrome and was reminded that the relevant DOM node is the .esriLegendService label. dropbox.com/s/1u72xl78c3ly8ny/esriLegendServiceLabel.png Using similar tools you might try inspecting to see if the string you need is present and that no CSS rules are preventing it from being displayed. – john gravois Aug 21 '13 at 22:10

I would suggest using the Table of Contents/Legend Widget for JavaScript API. It has all the functionality you describe and is a very well written, free, widget. I use it in my apps and it is very easy to configure.

  • I will definitely give this a try. Thank you, Craig. – Ruchira Welikala Aug 19 '13 at 14:43

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.