dijit/Tree<\/A>, nebo můžete použít běžné DOM elementy, vyberte si.<\/P><\/P>
Zde je nějaký kód, který přesně toto dělá.<\/P>
define([\n 'dojo\/_base\declare',\n 'dojo\/_base\Deferred',\n 'dojo\/_base\on',\n 'dojo\/_base\topic',\n 'dojo\/_base\query',\n 'dojo\/_base\dom',\n 'dojo\/_base\dom-attr',\n 'put-selector',\n 'dojo\/_base\dom-class',\n 'dojo\/_base\Evented',\n 'esri\/_base\lang',\n '.\/_layerservice',\n 'dojox/lang/functional/curry',\n 'dijit\/_WidgetBase',\n 'dijit\/_TemplatedMixin',\n 'dojo/text!.\/_templates/layertoc.tpl.html'\n], function(\n declare, Deferred, on, topic,\n query, dom, domAttr, put, domClass,\n Evented, esriLang,\n getLayers, curry,\n _WidgetBase, _TemplatedMixin,\n template\n) {\n var labelName = curry(function(a, b) {\n if (b.label && b.label.length > 1) {\n return b.label;\n } else if (a.layerName && a.layerName.length) {\n return a.layerName;\n } else {\n return 'Layer Item';\n }\n });\n var sub = esriLang.substitute;\n var layertitle = '<span class=\\"pull-right\\">${title}</span>';\n return declare([_WidgetBase, _TemplatedMixin, Evented], {\n templateString: template,\n postCreate: function() {\n var node = dom.byId('map_root');\n put(node, this.domNode);\n var map = this.get('map');\n var layerIds = this.get('layerIds');\n \/6 map over the layer ids and pull \u00016 \/6 the layers designated as part of legend \u00016 \/6 this.tocLayers = map.layerIds.map(function(x) {\n if (layerIds.indexOf(x) > -1) {\n return map.getLayer(x);\n } else {\n return false;\n }\n }).filter(function(a) { return a; });\n \/6 map over those layers and create some DOM element containers \u00016 \/6 this.tocLayers.map(function(x) {\n  .& nbsp.& nbsp.& nbsp.& nbsp.& nbsp.& nbsp.& nbsp.var visible = x.visible ? 'glyphicon-ok' : 'glyphicon-ban-circle'; \ n & nbsp.& nbsp.& nbsp.& nbsp.& nbsp.& nbsp.& nbsp.& nbsp.var panel = put(this.tocInfo,'div.panel.panel-default'); \ n & nbsp.& nbsp.& nbsp.& nbsp.& nbsp.& nbsp.& nbsp.var pheading = put(panel,'div.panel-heading'); \ n & nbsp.& nbsp.& nbsp.& nbsp.& nbsp.& nbsp.& nbsp.var ptitle = put(pheading,'h4.panel-title'); \ n & nbsp.& nbsp.& nbsp.& nbsp.& nbsp.& nbsp.put( \ n & nbsp.& nbsp.& nbsp.& nbsp.& nbsp.& nbsp.ptitle, \ n & nbsp.& nbsp.& nbsp.& nbsp.& nbsp.& nbsp.'span.glyphicon.' + visible + \ n & nbsp.& nbsp.& nbsp.& nbsp.& nbsp.'& #46 ;layer-item[data-layer-id=' + x.id + ']') ; \ n & nb sp .& nb sp .& nb sp .& nb sp .& nb sp .& nb sp .& nb sp .& nb sp .var node = \ n & nb sp .& nb sp .& nb sp .& nb sp .& nb sp .& nb sp .& nb sp .& nb sp.put(ptitle,'span',{ innerHTML: sub(x , layertitle) }); \ n & nb sp .& nb sp .& nb sp .& nb sp .& nb sp.this._getDetails(x,node,panel); \ n & nb sp .& nb sp .& nb sp .& nb sp;}\.bind(this)); \ n & nb sp .& nb sp .& nb sp .& nb sp. \/6 this will handle turning the whole service on/off \u00016 \/6 var layerHandle = on(this.tocInfo,'.layer-item:click',function(e){ \ n & nb sp .& nb sp .& nb sp .& nb sp.e.preventDefault(); \ n & nb sp .& nb sp .& nb sp .& nb sp.e.stopPropagation(); \ n & nb sp .& nb sp .& nb sp .& nb sp.domClass.toggle(e.target,'glyphicon-ok glyphicon-ban-circle'); \ n & nb sp .& nb sp .& nb sp .& nb sp.var id = domAttr.get(e.target,'data-layer-id'); \ n & nb sp .& nb sp .& nb sp .& nb sp.var lyr = map.getLayer(id); \ n & nb sp .& nb sp .& nb sp .& nb.sp.lyr.setVisibility(!lyr.visible); \ n &nb.sp.;}); \ n &nb.sp.; \/6 this will turn individual layers on/off \u00016 \/6 var itemHandle = on(this.tocInfo,'.sublayer-item:click',function(e){ \ n &nb.sp.;e.preventDefault(); \ n &nb.sp.;e.stopPropagation(); \ n &nb.sp.;domClass.toggle(e.target,'glyphicon-ok glyphicon-ban-circle'); \ n &nb.sp.;var id = domAttr.get(e.target,'data-layer-id'); \ n &nb.sp.;var subid = parseInt(domAttr.get(e.target,'data-sublayer-id')); \ n &nb.sp.;var lyr = map.getLayer(id); \ n &nb.sp.;var lyrs = lyr.visibleLayers ; \ n &nb.sp.;var visibleLayers = []; \ n &nb.sp.; \/6 this bit will adjust the visible layers based on what was clicked \u00016 \/6 if (lyrs.indexOf(subid) > -1) { \ n &nb.sp.;visibleLayers = lyrs.filter(function(x){return x !== subid ;});} else {visibleLayers = lyrs.concat([subid]);}lyr.setVisibleLayers(visibleLayers);});this.own(layerHandle,itemHandle);}, \/6 do a quick check that a URL has been provided \/6 _getDetails: function(layer,node,panel){if (!layer.url){return;}var pbody=put(panel,'div.panel-body');this._getLegend(layer,pbody);}, \/6 here is the workhorse \/6 _getLegend: function(layer,pbody){var url=layer.url+'\\/legend';var id=layer.id;6 this is a just a wrapper module I use for
6 esri/request. see source at <//SPAN>