2011-09-27 69 views
10
var gusersPanel = Ext.create('Ext.grid.Panel', { 
    flex:1, 
    columns: [{ 
     header: 'User Login', 
     dataIndex: 'user_login', 
     width:150 
    },{ 
     header: 'User Name', 
     dataIndex: 'user_nicename', 
     width:150 
    },{ 
     header:'Privledge', 
     dataIndex:'admin', 
     width:150 
    }], 
    autoScroll: true, 
    layout:'fit', 
    selModel: gusersSel, 
    store: gusersStore 

})网格面板滚动条在EXTJS 4不工作

您好我使用上述用于在Extjs4.0.2a网格面板代码当我在滚动条不工作的存储动态填充数据。 我也尝试使用doLayout()进行网格面板,但剂量工作也是如此。 网格面板在窗口中。

任何可以解决这个问题的东西?

其实它工作了一段时间,但始终没有工作。

+2

我做了gusersPanel.determineScrollbars()当我添加和从商店中删除数据,它工作正常。 –

回答

12

我遇到了同样的问题。他们使用自定义滚动条,它很漂亮(尤其是铬)。如果你不打算使用无限滚动,可能的解决方案可能是删除自定义滚动条并使用本地滚动条。要做到这一点只需添加以下到网格的配置:

var gusersPanel = Ext.create('Ext.grid.Panel', { 
    scroll   : false, 
    viewConfig  : { 
    style   : { overflow: 'auto', overflowX: 'hidden' } 
    }, 
    // ... 
}); 
+2

我做了gusersPanel.determineScrollbars()当我添加和从商店中删除数据,它工作正常。感谢您的回答 –

+3

这个解决方法是无用的,因为它打破了其他网格功能。 –

+0

@ArturBodera,你有更好的吗? –

9

我做gusersPanel.determineScrollbars()当我加入,并从存储区中删除的数据,它是工作的罚款。

+4

如果这是有效的答案,你应该接受它;) – Strayer

3

这样做的问题是滚动监听器被附加到afterrender事件的div元素上,但如果在布局操作之后不需要滚动条,div元素将从dom中移除。然后,当它再次被需要时,它被添加回来,但是只有当足够的时间已经通过垃圾收集时,extjs才会重新创建div节点,并且这一次它被添加到dom中,而无需再次附加滚动监听器。以下代码解决了此问题:

Ext.override(Ext.grid.Scroller, { 
    onAdded: function() { 
     this.callParent(arguments); 
     var me = this; 
     if (me.scrollEl) { 
      me.mun(me.scrollEl, 'scroll', me.onElScroll, me); 
      me.mon(me.scrollEl, 'scroll', me.onElScroll, me); 
     } 
    } 
}); 
+0

在我的情况下,当'onAdded'函数被称为'me.scrollEl'是未定义的,所以它不适用于我,你知道为什么吗? – inakiabt

+0

Ext.grid.Scroller在4.0中存在,但它在4.1中不存在:| –

+0

你对extjs 4.1+有同样的问题吗? –

0

您编写的代码布局:'fit'。它没有工作autoScroll。

将代码更改为某个高度并移除布局:“合适”代码。

像这样。

var gusersPanel = Ext.create('Ext.grid.Panel', { 
    flex:1, 
    columns: [{ 
    ........... 
    }], 
autoScroll: true, 
//layout:'fit', 
height: 130, 
selModel: gusersSel, 
store: gusersStore 

这是帮助你。干杯。