我已經基於Sencha給出的示例實現了無限網格。基本上,代理使用jsonp獲取json文件並填充網格。我希望網格大小爲10,我希望代理僅在用戶向下滾動至第10條記錄時才發出後續請求。每個記錄在網格視圖中垂直放置足夠的空間,只有約5條記錄可以不滾動(在我的14英寸筆記本電腦上,分辨率爲1366 x 768)。我已經將pagesize設置爲10,我的期望是,只有當我向下滾動到可見記錄之外時,纔會刷新網格。但是,即使沒有滾動,網格也會加載所有數據(共50條記錄),並提供5個單獨的請求。下面的代碼:ExtJS Grid呈現比頁面中指定的更多的行
Ext.require([
'Ext.grid.*',
'Ext.data.*',
'Ext.util.*',
'Ext.grid.plugin.BufferedRenderer'
]);
Ext.onReady(function() {
Ext.define('ContentModel', {
extend : 'Ext.data.Model',
fields : [ 'content_id', 'content' ],
idProperty: 'content_id'
});
var store = Ext.create('Ext.data.Store', {
id : 'store',
model : 'ContentModel',
buffered: true,
pageSize: 10,
proxy : {
type : 'jsonp',
url : 'http://website.com/Top1.json',
reader: {
root: 'contents',
totalProperty: 'totalCount'
}
},
autoLoad : true
});
var grid = Ext.create('Ext.grid.Panel', {
renderTo : Ext.getBody(),
width : '100%',
height : '100%',
title : 'Reader Panel',
id : 'reader',
store : store,
columns : [ {
id : 'content_id',
text : 'Content ID',
dataIndex : 'content_id',
width : '10%'
},
{
id : 'content',
text : 'Content',
dataIndex : 'content',
width : '90%'
} ]
});
Ext.define('JSONP Proxy', {
override: 'Ext.data.proxy.JsonP',
buildUrl: function(request) {
var me = this, url = this.getUrl(request);
console.log(url);
request.url = 'http://website.com/Top' + request.params.page + '.json';
return me.callParent([request]);
}
});
});
而且JSON文件的內容是:
Top1.json:
Ext.data.JsonP.callback1({"totalCount":"50", "contents":[{"content_id" : 1, "content" : "<div> Hello World 1</div><br><div> Hello World 1</div><br><div> Hello World 1</div><br><div> Hello World 1</div><br><div> Hello World 1</div><br><div> Hello World 1</div><br>"},{"content_id" : 2, "content" : "<div> Hello World 1</div><br><div> Hello World 1</div><br><div> Hello World 1</div><br><div> Hello World 1</div><br><div> Hello World 1</div><br><div> Hello World 1</div><br>"},{"content_id" : 3, "content" : "<div> Hello World 1</div><br><div> Hello World 1</div><br><div> Hello World 1</div><br><div> Hello World 1</div><br><div> Hello World 1</div><br><div> Hello World 1</div><br>"},{"content_id" : 4, "content" : "<div> Hello World 1</div><br><div> Hello World 1</div><br><div> Hello World 1</div><br><div> Hello World 1</div><br><div> Hello World 1</div><br><div> Hello World 1</div><br>"},{"content_id" : 5, "content" : "<div> Hello World 1</div><br><div> Hello World 1</div><br><div> Hello World 1</div><br><div> Hello World 1</div><br><div> Hello World 1</div><br><div> Hello World 1</div><br>"},{"content_id" : 6, "content" : "<div> Hello World 1</div><br><div> Hello World 1</div><br><div> Hello World 1</div><br><div> Hello World 1</div><br><div> Hello World 1</div><br><div> Hello World 1</div><br>"},{"content_id" : 7, "content" : "<div> Hello World 1</div><br><div> Hello World 1</div><br><div> Hello World 1</div><br><div> Hello World 1</div><br><div> Hello World 1</div><br><div> Hello World 1</div><br>"},{"content_id" : 8, "content" : "<div> Hello World 1</div><br><div> Hello World 1</div><br><div> Hello World 1</div><br><div> Hello World 1</div><br><div> Hello World 1</div><br><div> Hello World 1</div><br>"},{"content_id" : 9, "content" : "<div> Hello World 1</div><br><div> Hello World 1</div><br><div> Hello World 1</div><br><div> Hello World 1</div><br><div> Hello World 1</div><br><div> Hello World 1</div><br>"},{"content_id" : 10, "content" : "<div> Hello World 1</div><br><div> Hello World 1</div><br><div> Hello World 1</div><br><div> Hello World 1</div><br><div> Hello World 1</div><br><div> Hello World 1</div><br>"}]});
其他JSON文件都遵循相同的格式,具有獨特的內容ID,和有正確的回調(callback2,callback3,callback4和callback5)。
有人能告訴我爲什麼所有5個jsonp請求都會立即被解僱,而不是等待我滾動嗎?
感謝, Prathap
不知道爲什麼你需要使用這個bufferedrenderer插件?如果您在此處查看示例 - http://docs.sencha.com/ext-js/4-1/#!/example/grid/infinite-scroll-with-filter。HTML或這裏 - http://docs.sencha.com/ext-js/4-2/#!/example/grid/infinite-scroll-with-filter.html這樣的插件尚未使用。您的觀點是否經常調整大小? – netemp 2013-04-02 07:57:41
我使用它,因爲這是4.2中如何實現無限網格。您共享的第二個鏈接使用緩衝的渲染器插件。 不,我的視圖不會經常手動調整大小,但我猜每次刷新視圖時都會計算視圖大小,這會在用戶上下滾動時頻繁發生。 – Prathap 2013-04-03 09:13:41
不知道我們是否在同一頁面上,因爲當我在http://docs.sencha.com/ext-js/4-2/extjs-build/examples/grid/infinite查看JS文件的代碼時-scroll-with-filter.js - 我發現這個插件只通過'require'被包含,但它沒有在網格對象中使用ptype進行配置。 – netemp 2013-04-04 17:09:28