分享

dojox.grid.DataGrid 编程篇(3) -- DataGrid的一些Bug

 LibraryPKU 2014-04-17
dojox.grid.DataGrid 里存在一些  Bug,本篇将介绍如何解决它们:

1. layout定义为%时,滚动条的问题:
如下图,当列宽用"%"定义时,无论如何调整比例(就算不满100%) 也会出现横向滚动条。(IE, chrome 都有这个bug)
  1. <table dojoType='dojox.grid.DataGrid' id='grid1' jsid='js_grid1'   
  2.  style='border:1px #a8a8a8 solid;width:450px;height:200px;' store="getDataStore(10)"  
  3.  selectionMode='single' >  
  4.  <thead>  
  5.     <tr>  
  6.       <th field="f1"  width="20%" >列1</th>  
  7.       <th field="f2"  width="20%" >列2</th>  
  8.       <th field="f3"  width="20%" >列3</th>  
  9.       <th field="f4"  width="20%" >列4</th>  
  10.       <th field="f5"  width="20%" >列5</th>  
  11.     </tr>  
  12. </thead>  
  13. </table>  


通过继承 dojox.grid._View 重写 getScrollbarWidth() 方法,使得 ViewContentWidth 不会产生 overflow。

【dojo 1.8】

[javascript] view plaincopy
  1. define("DataGridEx",   
  2.        ["dojox/grid/DataGrid""dojox/grid/_View""dojo/_base/html""dojox/html/metrics"],   
  3.     function(DataGrid, _View, html, metrics) {  
  4.         var declare = dojo.declare;  
  5.           
  6.         var ViewEx = declare("ViewEx", _View, {  
  7.            getScrollbarWidth: function(){  
  8.                 var hasScrollSpace = this.hasVScrollbar();  
  9.                 var overflow = html.style(this.scrollboxNode, "overflow");  
  10.                 if(this.noscroll || !overflow || overflow == "hidden"){  
  11.                     hasScrollSpace = false;  
  12.                 }else if(overflow == "scroll"){  
  13.                     hasScrollSpace = true;  
  14.                 }  
  15.                 // 稍微扩大 scrollbar 的宽度  
  16.                 return (hasScrollSpace ? metrics.getScrollbar().w+2: 0); // Integer  
  17.             }  
  18.         });  
  19.           
  20.         var DataGridEx = declare("DataGridEx", DataGrid, {  
  21.            createView: function(inClass, idx){  
  22.                 // 改用继承后的 View 类  
  23.                 var view = new ViewEx({ grid: this, index: idx });  
  24.                 this.viewsNode.appendChild(view.domNode);  
  25.                 this.viewsHeaderNode.appendChild(view.headerNode);  
  26.                 this.views.addView(view);  
  27.                 html.attr(this.domNode, "align"this.isLeftToRight() ? 'left' : 'right');  
  28.                 return view;  
  29.             }  
  30.         });  
  31.         DataGridEx.markupFactory = DataGrid.markupFactory;  
  32.         return DataGridEx;  
  33.     });  

这样横向滚动条就木有了。

2. 颤动的一览
当使用兼容模式(<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">)的时候,在点击一览时,一览会闪一下。
我们可以通过下面的方法来修正这个问题:
[javascript] view plaincopy
  1. postCreate: function() {  
  2.     this.inherited(arguments);  
  3.       
  4.     this.focus._focusifyCellNode = function(inBork){  
  5.        var n = this.cell && this.cell.getNode(this.rowIndex);  
  6.        if(n){  
  7.           dojo.toggleClass(n, this.focusClass, inBork);  
  8.           if(inBork){  
  9.             var sl = this.scrollIntoView();  
  10.             try{  
  11.                 if(!this.grid.edit.isEditing()){  
  12.                     //dojox.grid.util.fire(n, "focus");  
  13.                     //if(sl){ this.cell.view.scrollboxNode.scrollLeft = sl; }  
  14.                 }  
  15.             }catch(e){}  
  16.          }  
  17.       }  
  18.    };  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多