在我的网格面板上只显示 10 行
Show only 10 rows on my Gridpanel
我正在使用 Ext.js 构建我的第一个平台,我正在尝试弄清楚如何为我的 Gridpanel 指定行数限制。我只想显示商店的最后 10 个值
目前,我正在从商店接收所有值,并用这些值填充网格,
我可以用这个:
gridStore.remove(gridStore.getAt(i))
但是我无法从存储中删除数据,因为我也在使用该存储在地图上加载一些折线,所以我必须隐藏行而不是从存储中删除数据。
我的商店:
Ext.define('ES.store.Timeline', {
extend: 'Ext.data.Store',
alias: 'store.timeline',
storeId: 'timeline',
fields: [
'vid', 'time', 'lat', 'lng', 'address', 'dir', 'vel', 'hidden'
],
pageSize: 500,
autoSync:true,
sorters: [
{
property: 'time',
direction: 'DESC'
}
],
data: {
query: []},
proxy: {
type: 'sessionstorage',
id: 'sessionTimeline',
reader: {
type: 'json',
rootProperty: 'query'
}
},
filters: [{ property: 'hidden', value: false }]
});
我的网格
Ext.define('ES.view.Layout.Menu.Menu', {
extend: 'Ext.grid.Panel',
alias: 'widget.timelineBar',
controller: 'menu',
viewModel: 'menu',
pageSiz: '10',
id: 'timelineBar',
autoScroll: true,
title: 'Timeline',
store: {
type: 'timeline'
},
columns: {
border: false,
defaults: {
hoverCls: ''
},
items: [{ ...
}]
}
});
谢谢
pageSize
是商店的 属性,而不是网格(您的代码中有错字 - pageSiz
)。
我想你可以使用 memory proxy with enablePaging
instead of sessionstorage proxy. Also you might need Ext.toolbar.Paging。
检查此 fiddle。
使用 pageSize 属性 of store.if 你只想显示 10 条记录。
但是如果你想显示最后 10 条记录,那么你必须通过过滤器。
filters: [
function(record) {
<condition>
return true/false;
}
]
您也可以使用连锁店,确保不会改变主店。
在您页面的 ViewModel 中,您可以使用如下代码:
initConfig: function(instanceConfig) {
var me = this,
config = {
stores: {
MainStore: {
storeId: 'MainStore',
model: ...,
proxy: {
...
})
},
LastUsed: {
autoDestroy: true,
source: 'MainStore',
// paging doesn't work on chained store
filters: [
function(record) {
let store = me.getStore('LastUsed'),
recordIndex = store.getRange().indexOf(record),
lastUsedCount = 10;
if((recordIndex+1) > lastUsedCount) {
return false
}
return true;
}
]
}
}
};
if (instanceConfig) {
me.getConfigurator().merge(me, config, instanceConfig);
}
return me.callParent([config]);
}
我正在使用 Ext.js 构建我的第一个平台,我正在尝试弄清楚如何为我的 Gridpanel 指定行数限制。我只想显示商店的最后 10 个值
目前,我正在从商店接收所有值,并用这些值填充网格,
我可以用这个:
gridStore.remove(gridStore.getAt(i))
但是我无法从存储中删除数据,因为我也在使用该存储在地图上加载一些折线,所以我必须隐藏行而不是从存储中删除数据。
我的商店:
Ext.define('ES.store.Timeline', {
extend: 'Ext.data.Store',
alias: 'store.timeline',
storeId: 'timeline',
fields: [
'vid', 'time', 'lat', 'lng', 'address', 'dir', 'vel', 'hidden'
],
pageSize: 500,
autoSync:true,
sorters: [
{
property: 'time',
direction: 'DESC'
}
],
data: {
query: []},
proxy: {
type: 'sessionstorage',
id: 'sessionTimeline',
reader: {
type: 'json',
rootProperty: 'query'
}
},
filters: [{ property: 'hidden', value: false }]
});
我的网格
Ext.define('ES.view.Layout.Menu.Menu', {
extend: 'Ext.grid.Panel',
alias: 'widget.timelineBar',
controller: 'menu',
viewModel: 'menu',
pageSiz: '10',
id: 'timelineBar',
autoScroll: true,
title: 'Timeline',
store: {
type: 'timeline'
},
columns: {
border: false,
defaults: {
hoverCls: ''
},
items: [{ ...
}]
}
});
谢谢
pageSize
是商店的 属性,而不是网格(您的代码中有错字 - pageSiz
)。
我想你可以使用 memory proxy with enablePaging
instead of sessionstorage proxy. Also you might need Ext.toolbar.Paging。
检查此 fiddle。
使用 pageSize 属性 of store.if 你只想显示 10 条记录。
但是如果你想显示最后 10 条记录,那么你必须通过过滤器。
filters: [
function(record) {
<condition>
return true/false;
}
]
您也可以使用连锁店,确保不会改变主店。
在您页面的 ViewModel 中,您可以使用如下代码:
initConfig: function(instanceConfig) {
var me = this,
config = {
stores: {
MainStore: {
storeId: 'MainStore',
model: ...,
proxy: {
...
})
},
LastUsed: {
autoDestroy: true,
source: 'MainStore',
// paging doesn't work on chained store
filters: [
function(record) {
let store = me.getStore('LastUsed'),
recordIndex = store.getRange().indexOf(record),
lastUsedCount = 10;
if((recordIndex+1) > lastUsedCount) {
return false
}
return true;
}
]
}
}
};
if (instanceConfig) {
me.getConfigurator().merge(me, config, instanceConfig);
}
return me.callParent([config]);
}