dijit/Tree<\/A> nutzen, du könntest einfach reguläre DOM-Elemente verwenden, such dir was aus.<\/P><\/P>
Hier ist etwas Code, der genau das macht.<\/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 // map über die Layer-IDs und hole \n // die als Teil der Legende ausgewiesenen Layer \n 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  .& nbsp;.map(function(a) { return a }); \ n & nbsp;. & nbsp;// map über diese Layer und erstelle einige DOM-Elementcontainer \ n & nbsp;. & nbsp;. tocLayers.map(function(x) { \ n & nbsp;. & nbsp;. & nbsp;. & nbsp;. var visible = x.visible ? 'glyphicon-ok' : 'glyphicon-ban-circle'; \ n & nbsp;. & nbsp;. & nbsp;. & nbsp;. var panel = put(this.tocInfo , 'div.panel.panel-default'); \ n & nbsp;. & nbsp;. & nbsp;. & nbsp;. var pheading = put(panel , 'div.panel-heading'); \ n & nbsp;. & nbsp;. & nbsp;. & nbsp;. var ptitle = put(pheading , 'h4.panel-title'); \ n & nbsp;. & nbsp;. & nbsp;. & nbsp;. put( \ n & nbsp;. & nbsp;. & nbsp;. & nbsp;. & nbsp;. ptitle , \ n & nbsp;. & nbsp;. & nbsp;. & nbsp;. & nbsp;. 'span.glyphicon.' + visible + \ n & nbsp;. & nbsp;. & nbsp;. & nbsp;. & nbsp;. '.layer-item[data-layer-id=' + x.id + ']') ; \ n & nbsp;. & nbsp;. & nbsp;. & nb sp
; \ n & nb sp ;. & nb sp ;. & nb sp ;. & nb sp ;. var node = \ n put(ptitle , \ n 'span' , \ n { innerHTML: sub(x , layertitle) } \ n ); \ n this._getDetails(x , node , panel); \ n }.bind(this)); \ n // dies wird das gesamte Service an-/ausschalten behandeln \ n var layerHandle = on(this.tocInfo , '.layer-item:click' , function(e) { \ n e.preventDefault(); \ n e.stopPropagation(); \ n domClass.toggle(e.target , 'glyphicon-ok glyphicon-ban-circle'); \ n var id = domAttr.get(e.target , 'data-layer-id'); \ n var lyr = map.getLayer(id); \ n lyr.setVisibility(!lyr.visible); \ n }); \ n // dies wird einzelne Layer an-/ausschalten \ n var itemHandle = on(this.tocInfo , '.sublayer-item:click' , function(e) { \ n e.preventDefault(); \ n e.stopPropagation(); \ n domClass.toggle(e.target , 'glyphicon-ok glyphicon-ban-circle'); \ n var id = domAttr.get(e.target , 'data-layer-id'); \ n var subid = parseInt(domAttr.get(e.target , 'data-sublayer-id')); \ n var lyr = map.getLayer(id); \ n var lyrs = lyr.visibleLayers ; \ n var visibleLayers = []; \ n // dieser Teil passt die sichtbaren Layer basierend auf dem Klick an \ n if (lyrs.indexOf(subid) > -1) { \ n visibleLayers = lyrs.filter(function(x) { \ n return x !== subid ; \ n }); \ n } else { \ n visibleLayers = lyrs.concat([subid]); \ n } \ n lyr.setVisibleLayers(visibleLayers); \ n }); \ n this.own(layerHandle , itemHandle); \ n }, \ n // mache eine schnelle Überprüfung ob eine URL bereitgestellt wurde \ n _getDetails: function(layer , node , panel) { \ n if (!layer.url) { return ; }
var pbody = put(panel , 'div.panel-body');
this._getLegend(layer , pbody);
},
// hier ist der Arbeitstier
_getLegend: function(layer , pbody) {
var url = layer.url + '\/legend';
var id = layer.id ;
// dies ist nur ein Wrapper-Modul das ich für
// esri/request verwende. Quelle siehe unter