微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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


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

【dojo 1.8】

define("DataGridEx",["dojox/grid/DataGrid","dojox/grid/_View","dojo/_base/html","dojox/html/metrics"],function(DataGrid,_View,html,metrics) {
        var declare = dojo.declare;
        
        var ViewEx = declare("ViewEx",{
           getScrollbarWidth: function(){
                var hasScrollSpace = this.hasVScrollbar();
                var overflow = html.style(this.scrollBoxNode,"overflow");
                if(this.noscroll || !overflow || overflow == "hidden"){
                    hasScrollSpace = false;
                }else if(overflow == "scroll"){
                    hasScrollSpace = true;
                }
                // 稍微扩大 scrollbar 的宽度
                return (hasScrollSpace ? metrics.getScrollbar().w+2: 0); // Integer
            }
        });
        
        var DataGridEx = declare("DataGridEx",DataGrid,{
           createView: function(inClass,idx){
                // 改用继承后的 View 类
                var view = new ViewEx({ grid: this,index: idx });
                this.viewsNode.appendChild(view.domNode);
                this.viewsHeaderNode.appendChild(view.headerNode);
                this.views.addView(view);
                html.attr(this.domNode,"align",this.isLeftToRight() ? 'left' : 'right');
                return view;
            }
        });
        DataGridEx.markupFactory = DataGrid.markupFactory;
        return DataGridEx;
    });

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


我有一个网格,可以根据更大的树结构编辑小块数据.为了更容易知道用户保存了什么,我希望当用户第一次看到网格时,网格处于不可编辑状态.当用户准备好后,他们可以单击编辑按钮,这将使网格的某些部分可编辑.然后,有一个保存或取消按钮可以保存更改或还原.在大多数情况下它是有效的.但
我即将开始开发一款教育性的视频游戏.我已经决定以一种我可以轻松打包为Web,Mobiles和可能的Standalone版本的方式来实现这一目标.我不想使用Flash.因此,我确信(无论如何我会听取建议)使用JavaScript和SVG.我正在对这个问题进行大量研究,但我很难把各个部分放在一起.我知道Raphae
我正在使用带有Grails2.3.9的Dojo1.9.DojoNumberTextBox小部件–我在表单中使用–将固定格式(JavaScript基本格式)的实数值(例如:12.56)设置为HTML表单输入字段(但根据浏览器区域设置显示/编辑它们,所以用户总是看到格式正确的数字).另一方面,Grails期望输入字段根据浏览器
1.引言鉴于个人需求的转变,本系列将记录自学arcgisapiforjavaScript的学习历程,本篇将从最开始的arcgisapiforjavaScript部署开始,个人声明:博文不在传道受业解惑,旨在方便日后复习查阅。由于是自学,文章中可能会出现一些纰漏,请留言指出,不必留有情面哦!2.下载ArcGISforDe
我正在阅读使用dojo’sdeclare进行类创建的语法.描述令人困惑:Thedeclarefunctionisdefinedinthedojo/_base/declaremodule.declareacceptsthreearguments:className,superClass,andproperties.ClassNameTheclassNameargumentrepresentsthenameofthec
我的团队由更多的java人员和JavaScript经验丰富组成.我知道这个问题曾多次被问到,但为了弄清楚我的事实,我需要澄清一些事情,因为我在客户端技术方面的经验非常有限.我们决定使用GWT而不是纯JavaScript框架构建我们的解决方案(假设有更多的Java经验).这些是支持我的决定的事实.>
路由dojo/framework/srcouting/README.mdcommitb682b06ace25eea86d190e56dd81042565b35ed1Dojo应用程序的路由路由FeaturesRoute配置路径参数RouterHistoryManagersHashHistoryStateHistoryMemoryHistoryOutletEventRouterContextInjectionOutl
请原谅我的无知,因为我对jquery并不熟悉.是否有dojo.connect()的等价物?我找到了这个解决方案:http:/hink-robot.com/2009/06/hitch-object-oriented-event-handlers-with-jquery/但是没有断开功能!你知道jquery的其他解决方案吗?有jquery.connect但这个插件在我的测试中不起作用.
与java类一样,在dojo里也可以定义constructor 构造函数,在创建一个实例时可以对需要的属性进行初始化。//定义一个类mqsy_yjvar mqsy_yj=declare(null,{     //thedefaultusername    username: "yanjun",          //theconstructor   
我一直在寻找一些最佳实践,并想知道Dojo是否具有框架特定的最佳实践,还是最好只使用通用的Javascript标准?特别是我主要是寻找一些功能和类评论的指导方针?解决方法:对于初学者来说,这是项目的风格指南:DojoStyleGuide