我已经创建了一个Ext.tree.Panel视图。
Ext.define('MyApp.requests.view.QueryRequestsGridView', {
extend: 'Ext.tree.Panel',
useArrows: true,
rootVisible: false,
singleExpand: true,
bind: {
store: '{queryRequestsGrid}'
},
viewConfig:{
markDirty: false
},
columns: [
{ text: 'Id', dataIndex: 'id', flex: 3},
{ xtype: 'treecolumn', text: 'Name', dataIndex: 'name', flex: 6},
{ text: 'ControlType', dataIndex: 'controlType', flex: 4, sortable: false},
{ text: 'Description', dataIndex: 'description', flex: 6}
],
dockedItems: [{
xtype: 'pagingtoolbar',
bind: {
store: '{queryRequestsGrid}'
},
displayInfo: true
}]
}]
});正如我从文档中看到的,Ext.tree.Panel的存储应该是Ext.data.TreeStore。
Ext.define('MyApp.requests.model.QueryRequestsGridModel', {
extend: 'Ext.data.TreeModel',
fields: [
{name: 'id'},
{name: 'name'},
{name: 'controlType'},
{name: 'description'}
]
});
Ext.define('MyApp.requests.store.QueryRequestsGridStore', {
extend: 'Ext.data.TreeStore',
model: 'MyApp.requests.model.QueryRequestsGridModel',
pageSize: 10,
alias: 'store.queryRequestsGrid',
root: {
expanded: false
},
remoteSort: true,
proxy: {
startParam: 'start',
limitParam: 'limit',
pageParam: undefined,
sortParam: undefined,
noCache: false,
type: 'ajax',
url: 'ucis.json'
}
});现在,在创建视图时,使用以下url请求TreeStore数据,不带起始和限制参数,但使用nodeParam:
ucis.json?node=root如果要用Ext.data.Store替换Ext.data.TreeStore,将发送以下url:
ucis.json?offset=0&limit=10问题是:树存储是否支持开始和限制分页工具条参数?
发布于 2015-12-21 22:56:29
您可以轻松地对列表进行分页。但是,我担心树分页的概念并不明确。
当将树看作缩进列表时,显然会有一些页面的叶子既不是根也不是父页面,这些页面已经发送到客户端(因为它们不在请求的页面上)。但是TreeStore不像缩进列表那样工作;它处理根节点和子节点。这就是为什么TreeStore没有内置分页支持的原因。此外,PagingToolbar只能使用节点列表,而不能使用树。
根据Pagination in Ext Tree,TreeStore不需要完整的树;它可以处理未完全加载的树,并且可以在展开某个节点时动态获取该节点的子节点。这就是您正在使用的。
当将每个节点的子节点看作一个列表时,没有内置的方法可以将节点的1000个子节点自动拆分到页面中。但是,您可以扩展TreeStore以实现这一点;没有针对它的硬技术边界。但是,您还必须使用BufferedRenderer扩展TreeGrid,这并不像听起来那么简单。最大的障碍是使用pagingToolbar,你不能很容易地使用它或从它扩展,因为它绑定到网格并使用它工作,但你需要在每个节点的子列表上分页。因为,如果您的根目录有一个包含1000个节点的列表,并且您打开了其中一个包含500个子节点的节点,那么pagingToolbar如何知道您要翻页到哪个节点的子节点呢?
发布于 2015-12-22 20:42:18
回答我自己的问题:
可以,可以使用store.load从视图控制器发送启动和限制参数(例如,在渲染后事件上
store.load({
params: {
start: 0,
limit: store.pageSize
}
});TreeStore不会在第一次加载时发送这些参数,因为它不支持自动分页。
https://stackoverflow.com/questions/34397226
复制相似问题