/** * 时间轴widget * @author Liuyl * @date 2015/10/15 */ define([ "dojo/_base/declare", "dojo/_base/array", "dojo/_base/lang", "dojo/dom", "dojo/dom-style", "dojo/dom-class", "dojo/dom-attr", "dojo/dom-construct", "dojo/topic", "dijit/_WidgetBase", "dijit/_TemplatedMixin", "dojo/text!controls/timeslider/TimeSliderControl.html", "base/BaseControl", "base/AppEvent", "utils/LayerUtil", "controls/timeslider/js/jquery.ui.timeslider" ], function( declare, arrayUtil, lang, dom, domStyle, domClass, domAttr, domConstruct, topic, _WidgetBase, _TemplatedMixin, template, BaseControl, AppEvent, LayerUtil ) { var Widget = declare("TimeSliderControl", [BaseControl], { templateString: template, baseClass: "timeslider-base", constructor: function(options) { this.index = {}; AppEvent.addAppEventListener(AppEvent.SWITCH_BASEMAP, lang.hitch(this, function(evt) { if(this.id == evt.sender){ return; } if (evt.hockId != this.hockId) return; if (this.curGroupId == evt.grouplayer && this.curSetId == evt.setlayer) { return; } var groupid = evt.grouplayer; if(evt.setlayer){ setid = evt.setlayer; }else{ //根据时间查找Group中的layerset是否有时间,没有的话设为默认 setid = this.index[groupid]["defaultset"]; arrayUtil.forEach(Object.keys(this.index[groupid]), lang.hitch(this, function(key) { if(key!="defaultset"&&key!="slider"&&setid==this.index[groupid][key]){ this.index[groupid].slider.timeslider("setCurrent", parseInt(key)); } })); arrayUtil.forEach(Object.keys(this.index[groupid]), lang.hitch(this, function(key) { if (key!="defaultset"&&key!="slider"&&this._parseResult.groups[groupid].layerset[this.index[groupid][key]].label == this._parseResult.groups[this.curGroupId].layerset[this.curSetId].label) { this.index[groupid].slider.timeslider("setCurrent", parseInt(key)); setid = this.index[groupid][key]; } })); } domStyle.set(this.index[this.curGroupId].slider[0], "display", "none"); domStyle.set(this.index[groupid].slider[0], "display", "block"); var curIndex = this.index[groupid].slider.timeslider("getCurrent"); // if (this.index[groupid][curIndex] != setid) { // arrayUtil.forEach(Object.keys(this.index[groupid]), lang.hitch(this, function(key) { // if (key!="defaultset"&&this.index[groupid][key] == setid) { // this.index[groupid].slider.timeslider("setCurrent", parseInt(key)); // } // })); // } this.curGroupId = groupid; this.curSetId = this.index[groupid][curIndex]; })); }, startup: function() { try { this.inherited(arguments); this.curGroupId = this.visibleGroupLayerId; this.curSetId = this.visibleSetLayerId; this._parseResult = LayerUtil.parseGroups(this.grouplayersConfig); this.groups = this._parseResult.groupsInOrder; arrayUtil.forEach(this.groups, lang.hitch(this, function(group, index) { this.index[group] = {}; var sliderDom = domConstruct.create("div", { "groupid": group, className: "timeslider_container" }, this.domNode); domStyle.set(sliderDom, "display", "none"); var timeset = []; //var setCount = this._parseResult.groups[group].layersetInOrder.length; var curIndex = 0; arrayUtil.forEach(this._parseResult.groups[group].layersetInOrder, lang.hitch(this, function(set, index) { var layerset=this._parseResult.groups[group].layerset[set]; timeset[index] = layerset.label; this.index[group][index] = layerset.id; if (this.curSetId == layerset.id) { curIndex = index; } })); $(sliderDom).timeslider({ groupName:this._parseResult.groups[group].label, timeset: timeset, max: timeset.length, min: 0, reverse: true, timeChangeHandler: lang.hitch(this, function(index) { var setid = this.index[this.curGroupId][index]; this.curSetId = setid; AppEvent.dispatchAppEvent(AppEvent.SWITCH_BASEMAP, { hockId: this.hockId, grouplayer: this.curGroupId, setlayer: setid, sender:this.id }); }) }); this.index[group].slider = $(sliderDom); this.index[group].defaultset = this._parseResult.groups[group].defaultset; $(sliderDom).timeslider("setCurrent", curIndex); })); domStyle.set(this.index[this.curGroupId].slider[0], "display", "block"); } catch (err) { console.log(err); } }, show: function() { domStyle.set(this.domNode, "display", "block"); }, hide: function() { domStyle.set(this.domNode, "display", "none"); } }); return Widget; });