2014-04-24 10 views
0

我們正試圖關閉這個例子的工作數據: http://dev.sencha.com/deploy/ext-4.0.1/examples/grid/buffer-grid.htmlExt JS的存儲意外重新加載時,它應該被緩衝

例如在商店:

// create the Data Store 
var store = Ext.create('Ext.data.Store', { 
    id: 'store', 
    pageSize: 50, 
    // allow the grid to interact with the paging scroller by buffering 
    buffered: true, 
    // never purge any data, we prefetch all up front 
    purgePageCount: 0, 
    model: 'ForumThread', 
    proxy: { 
     type: 'memory' 
    } 
}); 

//and in the grid: 
... 
store: store, 
verticalScroller: { 
    xtype: 'paginggridscroller', 
    activePrefetch: false 
}, 
loadMask: true, 
... 

但是,當我們在網格中滾動過去pageSize的記錄,我們得到了一個很長的停頓比剛纔的下一組記錄更被渲染 - 商店本身是從重新加載數據我們網絡服務。調用我們的Web服務會加載所有數據,並且我們不希望在用戶滾動時重新加載它。我們希望RENDERING被緩衝,但不是數據加載,就像示例所述,「他的例子說明預先加載所有記錄並緩衝渲染。」主要是因爲我們想要避免在這一點上移動排序和排序到服務器,而且還要提高性能。但是我們也不希望所有的東西都立即渲染,因爲這會導致IE8中可怕的長時間運行的javascript錯誤。關於什麼可能導致商店在此模式下重新查詢數據源的任何想法?

回答

0

您可以加載的所有記錄在一個商店頁面加載時(allRecordStore),但使用其他商店填入記錄的網格(gridStore)從allRecordStore和使用getRange當用戶通過網格分頁。

您可以在網格的PagingToolBar上使用beforechange監聽器(您連接到它的bbar配置選項)。

在這個監聽器,你會做這樣的事情:

//you've probably have already shown items 0,19 when the page loaded   
var items = allRecords.getRange(20, 40); 
gridRecords.load(items); 

顯然,你需要實現邏輯來跟蹤指數的(被用戶觀看記錄80至100,20至40,等等)通過查看beforechange聽衆的page參數的變量startstart是我選擇在我的商店

的配置選項paramNames名稱這就是我會做,但再我的大部分經驗是3.x中,也許有4個這樣做的更簡單的方法。 x

+0

弗朗西斯,這聽起來很有希望。你知道任何示例代碼,你可以指向我嗎?謝謝 – Luther

+0

@Luther你正在使用哪個ExtJS版本?畢竟,薩基的回答可能更適合。 http://dev.sencha.com/deploy/ext-4.0.1/examples/grid/buffer-grid.html –

+0

我們在4.1上,看着4.2如果它可以幫助解決這個問題 – Luther

0

如果您想要加載所有記錄並僅渲染緩衝,那麼您需要在商店上設置buffered:false,並且您需要使用buffered grid view renderer

相關問題