[ExtJS] store 数据状态 记录 dirty 和 crudState 使用

本文介绍了在ExtJS中如何利用store的数据属性`dirty`和`crudState`来判断grid表格数据是否被修改。通过监控`dirty`标志和`crudState`的状态变化,可以在用户编辑后检测数据是否发生更改,特别是在需要在取消或关闭时进行数据验证的场景。同时提到了可以使用`itemchange`事件实时监听数据行的变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在使用ExtJS的grid控件时,常用到store 数据绑定。然后grid又是可以编辑的,如下:

想要是实现的场景:在整个表格编辑后,点击取消或关闭时,判断数据有无被更改过

对grid的更改,其实就是对store的更改,那我们只需查找store里的数据有无更改记录即可。

store里的数据,都是一个个数据集合collection,而collection有两个标记 可以判断此条数据是否变更过。

dirty

此配置属性描述此组件的已修改状态。只读

Defaults to:

false

若是组件或是数据对象被修改过 dirty就为true

cruState

该值最初为“R”或“C”,表示初始CRUD状态。当记录发生更改并通知各个加入方(stores, sessions, etc.)时,此值将在这些调用之前更新。换言之,在更新“crudstate”之后通知加入方。这意味着,如果在这些通知之外使用此状态,则“crudState”属性可能与基础更改短暂不同步。

  • "R" - 记录处于完全检索(未修改)状态。
  • "C" - 记录处于新创建(虚拟)状态。
  • "U" - 记录处于更新、修改(脏)状态。
  • "D" - 这项记录处于“删除”状态

Defaults to:

'R'

使用方法,用数据对象collection的集合items去遍历,然后查找行的dirty

Store对象.getData().items.some(
    (x)=>{ 
      if(x.dirty) {
        alert('有更改记录');
        return true;//使用return true中断
    }    
})

若是想实时监听store里的行数据有无变动,可以通过监听itemchange事件来实现

Store对象.getData().addListeners('itemchange', '方法名', 作用域)

例如:

 onItemChange(collection, details) {
        const me = this,
            grid = me.lookup('grid'),
            store = grid.getStore(),
            vm = me.getViewModel();//用viewModel里某个字段标识
        let ModifiedRecords = store.getModifiedRecords();//所有有变动的列
        if (ModifiedRecords.length == 0) vm.set('hasChange', false);
        else {
            let isChange = false;
            ModifiedRecords.map((rec) => {
                //rec.modified 变更的数据 未提交改变前的值
                for (var key in rec.modified) {
                    if (rec.modified[key] == null) {
                        if (Ext.isEmpty(rec.get(key)))//若为true 相当于没更改
                        {
                            isChange = false;
                        } else return isChange = true;
                    } else {
                        if (rec.modified[key] != rec.get(key))//新值和旧值不等
                            return isChange = true;
                    }
                }
            });
            vm.set('hasChange', isChange);
        }
    },

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

29号同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值