/** * infoWindow的template * @author Wenyb * @date 2015/11/4 */ define([ "base/BaseControl", "dojo", "dojo/_base/declare", "dojo/text!controls/tab/TabControl.html", "dojo/_base/lang", "dojo/query", "dojo/dom-construct", "dojo/dom-style", "dojo/dom-attr", "dojo/on", "dojo/dom-class", "dojo/domReady!" ], function( BaseControl, dojo, declare, template, lang, query, domConstruct, domStyle, domAttr, on, domClass ) { var Widget = declare("TabControl", [BaseControl], { templateString: template, baseClass: "tabcontrol", //{tab:[{type:"tab1",label:"TAB1",active:true},{type:"tab1",label:"TAB2"}]} constructor: function(options, srcRefNode) { this.activeTabType = null; this.tabIndex = {}; }, startup: function() { for (var i = 0; i < this.tab.length; i++) { this._createTab(this.tab[i]); } this.inherited(arguments); }, _createTab: function(tab) { var className = this.baseClass + "-tabbutton "; if (tab.active) { className += this.baseClass + "-tabbutton-actived"; } tab.span = domConstruct.create("div", { className: className, innerHTML: tab.label, "data-type": tab.type }, this.tabContainer); on(tab.span, "click", lang.hitch(this, this._tabButtonClick)); this.tabIndex[tab.type] = tab; }, postCreate: function() { this.inherited(arguments); }, changeActiveTab: function(type) { if (this.activeTabType) { var tab = this.tabIndex[this.activeTabType]; domClass.remove(tab.span, this.baseClass + "-tabbutton-actived"); if (tab.content) { domStyle.set(tab.content, "display", "none"); } this.activeTabType = null; } if (type) { var tab = this.tabIndex[type]; domClass.add(tab.span, this.baseClass + "-tabbutton-actived"); if (tab.content) { domStyle.set(tab.content, "display", "block"); } this.activeTabType = type; } }, onChangeActiveTab: function(type) { return type; }, //将两个type的Content关联,即设为同一个dom,使得切换到两个tab时,显示状态一致的相同内容。如需根据type改变content内部行为,可对onChangeActiveTab进行拦截。 //type2需要已设置content,linkContent后type1的content将与type2的保持一致 linkContent: function(type1, type2) { if (this.tabIndex[type2] && this.tabIndex[type2].content && this.tabIndex[type1]) { this.tabIndex[type1].content = this.tabIndex[type2].content; } }, setContent: function(type, content) { var tab = this.tabIndex[type]; if (tab.content) { domConstruct.destroy(tab.content); tab.content = null; } var style = "display:none"; if (this.activeTabType == type) { style = "display:block"; } tab.content = domConstruct.create("div", { className: this.baseClass + "-tabcontent-box", "data-type": type, style: style }, this.tabContent); domConstruct.place(content, tab.content); }, _tabButtonClick: function(evt) { var type = domAttr.get(evt.currentTarget, "data-type"); if (this.activeTabType == type) { if (!this.disableNoActiveTab) { this.changeActiveTab(null); this.onChangeActiveTab(null); } } else { this.changeActiveTab(type); this.onChangeActiveTab(type); } }, hideContent: function() { this.changeActiveTab(null); }, hideTab: function() { domStyle.set(this.tabcontainer, "display", "none"); domStyle.set(this.content, "bottom", "0px"); }, show: function() { domStyle.set(this.domNode, "display", "block"); }, hide: function() { domStyle.set(this.domNode, "display", "none"); } }); return Widget; });