首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以使用Extjs5 TreeStore在ajax请求中发送开始和限制参数?

是否可以使用Extjs5 TreeStore在ajax请求中发送开始和限制参数?
EN

Stack Overflow用户
提问于 2015-12-21 21:48:10
回答 2查看 970关注 0票数 1

我已经创建了一个Ext.tree.Panel视图。

代码语言:javascript
复制
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。

代码语言:javascript
复制
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:

代码语言:javascript
复制
ucis.json?node=root

如果要用Ext.data.Store替换Ext.data.TreeStore,将发送以下url:

代码语言:javascript
复制
ucis.json?offset=0&limit=10

问题是:树存储是否支持开始和限制分页工具条参数?

EN

回答 2

Stack Overflow用户

发布于 2015-12-21 22:56:29

您可以轻松地对列表进行分页。但是,我担心树分页的概念并不明确。

当将树看作缩进列表时,显然会有一些页面的叶子既不是根也不是父页面,这些页面已经发送到客户端(因为它们不在请求的页面上)。但是TreeStore不像缩进列表那样工作;它处理根节点和子节点。这就是为什么TreeStore没有内置分页支持的原因。此外,PagingToolbar只能使用节点列表,而不能使用树。

根据Pagination in Ext Tree,TreeStore不需要完整的树;它可以处理未完全加载的树,并且可以在展开某个节点时动态获取该节点的子节点。这就是您正在使用的。

当将每个节点的子节点看作一个列表时,没有内置的方法可以将节点的1000个子节点自动拆分到页面中。但是,您可以扩展TreeStore以实现这一点;没有针对它的硬技术边界。但是,您还必须使用BufferedRenderer扩展TreeGrid,这并不像听起来那么简单。最大的障碍是使用pagingToolbar,你不能很容易地使用它或从它扩展,因为它绑定到网格并使用它工作,但你需要在每个节点的子列表上分页。因为,如果您的根目录有一个包含1000个节点的列表,并且您打开了其中一个包含500个子节点的节点,那么pagingToolbar如何知道您要翻页到哪个节点的子节点呢?

票数 1
EN

Stack Overflow用户

发布于 2015-12-22 20:42:18

回答我自己的问题:

可以,可以使用store.load从视图控制器发送启动和限制参数(例如,在渲染后事件上

代码语言:javascript
复制
store.load({
    params: {
        start: 0,
        limit: store.pageSize
    }
});

TreeStore不会在第一次加载时发送这些参数,因为它不支持自动分页。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34397226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档