Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting DojoDataGrid将使页面;“跳跃”;更改排序时_Sorting_Datagrid_Dojo - Fatal编程技术网

Sorting DojoDataGrid将使页面;“跳跃”;更改排序时

Sorting DojoDataGrid将使页面;“跳跃”;更改排序时,sorting,datagrid,dojo,Sorting,Datagrid,Dojo,我的一个页面(包含更多内容)中有一个Dojo Datagrid,出现了以下问题:只要我单击列标题更改排序,页面就会跳起来,就像我单击了某个HTML锚一样 有趣的是,页面跳转将使网格仅显示跳转后的前两行,而不是(例如)在跳转后将网格从页面顶部开始,这是使用锚定时的预期行为 这个问题出现在不同的浏览器中(经过测试:Firefox 3.6、Opera 10、IE6),所以我想这可能是Dojo问题/-bug 有什么办法让这种讨厌的行为停止吗 您好, 选择0r PS:似乎描述了一个类似的问题,只针对JQu

我的一个页面(包含更多内容)中有一个Dojo Datagrid,出现了以下问题:只要我单击列标题更改排序,页面就会跳起来,就像我单击了某个HTML锚一样

有趣的是,页面跳转将使网格仅显示跳转后的前两行,而不是(例如)在跳转后将网格从页面顶部开始,这是使用锚定时的预期行为

这个问题出现在不同的浏览器中(经过测试:Firefox 3.6、Opera 10、IE6),所以我想这可能是Dojo问题/-bug

有什么办法让这种讨厌的行为停止吗

您好, 选择0r


PS:似乎描述了一个类似的问题,只针对JQuery(不幸的是,也没有解决方案)

在DataGrid和底层网格中有两种力量在起作用,它们可以导致网格在抓取之间收缩到其标题行的高度,然后重新增长。如果您在滚动到页面底部时遇到您特别描述的行为,您的浏览器可能会“向上滚动”(以便其视口的底部与页面的新底部对齐),但当表格加载新数据并再次调整大小时,您的浏览器仍会“向上滚动”

我花了一些时间在DataGrid和_Grid周围挖掘。我发现了两个原因:

  • DataGrid的_clearData函数,它调用updateRowCount(0)(即,在新结果出现之前,将网格减少到0行)

  • _Grid的_resize函数,如果_autoHeight为真,则将其viewsNode的高度样式设置为“”(如果autoHeight为真,或者是一个数>=rowCount,则似乎是这种情况)

  • 如果你不反对干扰源代码,你可以简单地从DataGrid中删除一行代码;不过,假设您想要一种更干净的方法,我尝试使用两种变通方法对DataGrid进行子类化。看看你的情况如何

    dojo.provide('my.DataGrid');
    
    dojo.declare('my.DataGrid', dojox.grid.DataGrid, {
      updateRowCount: function(inRowCount) {
        if (inRowCount > 0) { //ignore requests to set rowCount to 0
          this.inherited(arguments);
        }
      },
      _resize: function(changeSize, resultSize) {
        if (this._autoHeight) {
          //sizeblink workaround
          var _viewsNode = this.viewsNode;
          this.viewsNode = {style: {height: ''}}; //_Grid._resize crash dummy
          this.inherited(arguments);
          this.viewsNode = _viewsNode;
          //call post-functions again with node properly hooked
          this.adaptWidth();
          this.adaptHeight();
          this.postresize();
        } else {
          this.inherited(arguments);
        }
      }
    });
    //carry over DataGrid's custom markupFactory, otherwise declarative won't work
    my.DataGrid.markupFactory = dojox.grid.DataGrid.markupFactory;
    

    希望它能有所帮助,或者至少提供一些见解。我想知道这个问题是否应该作为一个bug输入dojo的trac…

    这里有一个快速而肮脏的解决方法:正如CnEY评估的那样,问题是DataGrid将自身重置为0行,然后再次填充数据

    如果用最小高度为网格高度的DIV包围DataGrid,则重置不会影响页面的高度,因此“跳跃”将停止


    当然,这只是一个基本的解决方法,因为即使使用JavaScript设置/更改,周围DIV的高度也有点静态,所以我更愿意使用动态的方法(如CnEY发布的解决方案)。

    您能提供一些代码/详细信息来使用网格吗?您是否已附加到网格上的任何事件?网格中的数据是否应用了任何特殊格式?我已经广泛使用了网格,但我从未见过这种行为,因此了解您的不同之处会有所帮助。请加载页面,并确保URL末尾没有“#”。单击标题后,是否添加了“#”?如果是这样,听起来标题链接并没有阻止默认操作。你有一个示例页面吗?@Donal:我已经连接到“onStyleRow”,但就是这样,其余的看起来像
    var grid=new dojox.grid.DataGrid({'store':store,'structure':structure,'autoHeight':true,'autoWidth':true(…)
    ,没有特殊之处。@Nick:点击标题将保持URL不变(没有“#”)添加。遗憾的是,我无法提供示例页面,因为网格是一个相当复杂的内部项目的一部分。从代码中删除“autoHeight”似乎可以消除“跳跃”“,但我看到的唯一东西是标题,因此这不是选项。由于所需的高度变化很大,固定高度也没有用。我们发现重置DataGrid是一个需要关注的问题,同时找到了一个解决方法(请参阅我的答案),但您的解决方案肯定是受欢迎的(即使我还没有尝试过,但很快就会尝试)。非常感谢!我想这是因为你设定了一个悬赏,但它在你标记它之前就过期了。我承认我离悬赏的最后期限很近,所以我真的没想到会得到它;)如果它最终对你有用,那么我很高兴它对你有帮助。