dijit/Tree<\/A>, vous pourriez simplement utiliser des éléments DOM réguliers, faites votre choix.<\/P><\/P>
Voici un peu de code qui fait exactement cela.<\/P>
define([\n 'dojo\/_base\/_declare',\n 'dojo\/_Deferred',\n 'dojo\/_on',\n 'dojo\/_topic',\n 'dojo\/_query',\n 'dojo\/_dom',\n 'dojo\/_dom-attr',\n 'put-selector',\n 'dojo\/_dom-class',\n 'dojo\/_Evented',\n 'esri\/_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 'Élément de couche';\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 \/ map over the layer ids and pull \u0000 \/ the layers designated as part of legend \u0000 \/ this.tocLayers = map.layerIds.map(function(x) { \u00a0 \u00a0 \u00a0 if (layerIds.indexOf(x) > -1) { \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return map.getLayer(x); \u00a0 \u00a0 \u00a0 } else { \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return false; \u00a0 \u00a0 \u00a0 } }); filter(function(a) { return a ; }); \u00a0 \u00a0 \/ map over those layers and create some DOM element containers \u00a0 this.tocLayers.map(function(x) { \u00a0 \u00a0 \u00a0 var visible = x.visible ? 'glyphicon-ok' : 'glyphicon-ban-circle'; \u00a0 \u00a0 \u00a0 var panel = put(this.tocInfo , 'div.panel.panel-default'); \u00a0 \u00a0 \u00a0 var pheading = put(panel , 'div.panel-heading'); \u00a0 \u00a0 \u00a0 var ptitle = put(pheading , 'h4.panel-title'); \u00a0 \u00a0 \u00a0 put( ptitle , 'span.glyphicon.' + visible + '.layer-item[data-layer-id=' + x.id + ']'); var node = put(ptitle , 'span' , { innerHTML: sub(x , layertitle) }); this._getDetails(x , node , panel); }.bind(this)); \/ this will handle turning the whole service on/off \/ var layerHandle = on(this.tocInfo , '.layer-item:click' , function(e) { e.preventDefault(); e.stopPropagation(); domClass.toggle(e.target , 'glyphicon-ok glyphicon-ban-circle'); var id = domAttr.get(e.target , 'data-layer-id'); var lyr = map.getLayer(id); lyr.setVisibility(!lyr.visible); }); \/ this will turn individual layers on/off \/ var itemHandle = on(this.tocInfo , '.sublayer-item:click' , function(e) { e.preventDefault(); e.stopPropagation(); domClass.toggle(e.target , 'glyphicon-ok glyphicon-ban-circle'); var id = domAttr.get(e.target , 'data-layer-id'); var subid = parseInt(domAttr.get(e.target , 'data-sublayer-id')); var lyr = map.getLayer(id); var lyrs = lyr.visibleLayers ; var visibleLayers = []; \/ this bit will adjust the visible layers based on what was clicked \/ if (lyrs.indexOf(subid) > -1) { visibleLayers = lyrs.filter(function(x) { return x !== subid ; }); } else { visibleLayers = lyrs.concat([subid]); } lyr.setVisibleLayers(visibleLayers); }); this.own(layerHandle , itemHandle); }, \/ do a quick check that a URL has been provided \/ _getDetails: function(layer , node , panel) { if (!layer.url) { return ; } var pbody = put(panel , 'div.panel-body'); this._getLegend(layer , pbody); }, \/ here is the workhorse \/ _getLegend: function(layer , pbody) { var url = layer.url + '\/legend'; var id = layer.id ; \/ this is a just a wrapper module I use for
esri/request. voir la source sur <\/SPAN>