2011-09-27 154 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 

這是幫助你。乾杯。