修改TabContainer.js文件,在dijit.layout.TabController中添加函数onButtonClick,大功告成!
当然这个方法有点代价有点高,如果只是为了单独解决Grid问题,可以直接each一下Grid,修改一下就可以。
dojo.declare("dijit.layout.TabController",dijit.layout.StackController,{ // summary: // Set of tabs (the things with titles and a close button,that you click to show a tab panel). // description: // Lets the user select the currently shown pane in a TabContainer or StackContainer. // TabController also monitors the TabContainer,and whenever a pane is // added or deleted updates itself accordingly. templateString: " ",// tabPosition: String // Defines where tabs go relative to the content. // "top","bottom","left-h","right-h" tabPosition: "top",// doLayout: Boolean // TODOC: deprecate doLayout? not sure. doLayout: true,// buttonWidget: String // The name of the tab widget to create to correspond to each page buttonWidget: "dijit.layout._TabButton",postMixInProperties: function(){ this["class"] = "dijitTabLabels-" + this.tabPosition + (this.doLayout ? "" : " dijitTabNoLayout"); this.inherited(arguments); }, onButtonClick: function(/*Widget*/ page){ // summary: // Called whenever one of my child buttons is pressed in an attempt to select a page this.inherited(arguments); dojo.forEach(page.getDescendants(),function(widget){ if(widget.resize)widget.resize(); }); }, //TODO: can this be accomplished in CSS? _rectifyRtlTabList: function(){ //Summary: Rectify the length of all tabs in rtl,otherwise the tab lengths are different in IE if(0 >= this.tabPosition.indexOf('-h')){ return; } if(!this.pane2button){ return; } var maxLen = 0; for(var pane in this.pane2button){ maxLen = Math.max(maxLen,dojo.marginBox(this.pane2button[pane].innerDiv).w); } //unify the length of all the tabs for(pane in this.pane2button){ this.pane2button[pane].innerDiv.style.width = maxLen + 'px'; } } });