修改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';
- }
- }
- });