[ExtJS] 表格中使用状态管理器 (Using State Manager for Grid Columns)

ExtJS 提供了非常强大的状态管理器 (State Manager),可以再许多组件上使用。
State Manager 允许您使用 LocalStorage 或 Cookies 保存视图的状态。只需初始化状态管理器并配置 stateful 和 stateId,即可轻松使用。

下面举个例子,创建一个 Grid,它可以自动保存列的位置、可见列等信息,下次创建表格会自动应用这些设置。

目前有两种类型的状态提供者 Ext.state.CookieProvider 和 Ext.state.LocalStorageProvider。
你可以通过扩展 Ext.state.Provider 类来实现自己的 Provider。
这里我使用 CookieProvider。

第一件事是初始化 StateManager 并声明 Provider。在 Application.js init 函数中执行此操作。

Ext.define('MyApp.Application', {
    extend: 'Ext.app.Application',
    name: 'MyApp',

    init : function() {
        Ext.state.Manager.setProvider(new Ext.state.CookieProvider({
            expires : new Date(Ext.Date.now() + (1000*60*60*24*90)) // 90 days
        }));
    },

    launch:function() {
        // Do something
    }
});

现在定义一个 Grid

Ext.define('MyApp.view.Users', {
    extend: 'Ext.grid.Panel',
    alias: 'widget.users_grid',
    title: 'Users',
    stateful:true,
    stateId:'users_grid_stid',
    store:{
        data:[
            {
                first_name:'Joe',
                last_name:'Blogs'
            }
        ]
    },
    columns: {
        items: [
            {
                xtype: 'gridcolumn',
                dataIndex: 'first_name',
                text: 'First Name',
                width: 200
            },
            {
                xtype: 'gridcolumn',
                dataIndex: 'last_name',
                text: 'Last Name',
                width: 200
            }
        ]
    }
});

Grid 设置 stateful:true,并且设置了 stateId 为 users_grid_stid。

然后运行程序。
这里写图片描述

现在将 First Name 列移动到 Last Name 列的右侧。
这里写图片描述

刷新浏览器,您会注意到已保存cookie并且网格保持了列的状态。
这里写图片描述

通过 Cookie 实现这一点显然有其缺点,比如浏览器用户不允许使用 Cookie,而且可以存储的 Cookie 的大小和数量存在限制。
理想情况下,在生产应用程序中,你可能希望将其保存在服务器上。如前所述,您可以创建自己的 State Provider 来实现类似的功能。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值