2012-07-25 65 views
2

在我的网格上我正在使用rowediting。extjs 4.1页面滚动到网格顶部在行更新的Internet Explorer中

如果使用Internet Explorer 10(可能是其他版本太)和页面有滚动条

当我编辑一行,然后单击“更新”页面滚动到电网的开始。

这个问题在(虽然没有专门针对4.1)上有很好的记录。

我见过固定的覆盖rowModel这样

Ext.override(Ext.selection.RowModel, { 
    onRowMouseDown: function(view, record, item, index, e) { 
//  view.el.focus(); 
     this.selectWithEvent(record, e); 
    } 
}); 

我也看到添加以下电网。

selModel: Ext.create('Ext.selection.Model', { listeners: {} }), 

这些选项都不适用于我。

  • 编辑*

我已经试过:如下建议 “preserveScrollOnRefresh真”。但问题仍然存在。我在Dropbox上放了一个例子。要在Internet Explorer中重新创建此项,您需要最小化浏览器并单击/编辑需要网格页脚的项目。

https://www.dropbox.com/s/l50d12t3cjq8kef/scrolling.htm

回答

4

的标准功能为我的作品:

Ext.define('My.Grid', { 
    extend: 'Ext.grid.Panel', 

    viewConfig: { 
     preserveScrollOnRefresh: true 
    } 
}); 
+0

+1这个答案。在Chrome和FF中,我也遇到了4.1和4.1.1中的相同问题。但是这有所帮助。 – devOp 2012-09-05 14:47:03

+0

感谢您的意见。看起来很正确。虽然它仍然无法在Internet Explorer上运行。 – frosty 2012-09-12 10:37:54

+0

它在IE 9和Chrome上为我工作 – 2012-12-14 19:58:59

1

在您使用CellModel或与其他解决方案有问题的情况下,这个解决方案应该工作:

Ext.override(Ext.dom.Element, { 
    focus: function (defer, dom) { 
     var me = this, 
      scrollTop, 
      body; 

     dom = dom || me.dom; 
     body = (dom.ownerDocument || DOC).body || DOC.body; 
     try { 
      if (Number(defer)) { 
       Ext.defer(me.focus, defer, me, [null, dom]); 
      } else { 
       if (dom.tagName != 'DIV') { 
        if (dom.offsetHeight > Ext.dom.Element.getViewHeight()) { 
         scrollTop = body.scrollTop; 
        } 
        dom.focus(); 
        if (scrollTop !== undefined) { 
         body.scrollTop = scrollTop; 
        } 
       } 
      } 
     } catch (e) { 
     } 
     return me; 
    } 
});