EXTJS系列笔记————xtype为form的panel判断是不是dirty

extjs再用到表单form的时候,经常需要判断内容是不是被修改过。这里有许多陷阱,这里根据自己的经验给大家分享下:

一、对基本的form或者xtype为formpanel的组件,经常会出现 每次调用form的isDirty()方法返回的都是true,这种情况下其实可以去看下API,

  1. /** 
  2.  * @cfg {Boolean} trackResetOnLoad  
  3.  * 如果为true,则表单对象的form.reset()方法重置到最后一次加载的数据或setValues()数据,以相对于一开始创建表单那时的数据。  
  4.  * If set to true, form.reset() resets to the last loaded or setValues() data instead of when the form was first created. 
  5.  */  
  6. trackResetOnLoad : false,  

trackResetOnLoad是在form表单load数据的时候是否记录字段原始值的开关。 

在setVlaues中会根据这个开关进行判断,如果为true就记录这个数据。

 

所以你可以在初始化 form的时候给他的trackResetOnLoad属性置为true.

1、以上适用于类似于新增打开的form判断。如果是类似点击修改的操作,必须修改

      form的originalValue,在loadRecord数据后,再次给原始值复制:

  1. form.getForm().items.each(function(f){  
  2.      f.originalValue=String(f.getValue());   
  3.  });  

 2、如果form不是通过setValues或loadRecord来赋值,而是单个组件分别赋值trackResetOnLoad的值可不用配置。


二、xtype为form的组件,一开始我也尝试着给他设置TrackResetOnLoad属性,但是一直失败。后来看了源码知道,原来xtype为form的组件其实 本质是一个panel,只是给了它一些form的基本属性而已,知道这个以后,果断利用他的getForm()方法拿取form,然后在用 form.setConfig("trackResetOnLoad",true);然后在form的setValues()以后重新reset()下,让他的oraginalVal变成最新的值,总结的代码
var form = Ext.getCmp("form").getForm();

form.setConfig("trackResetOnLoad",true);

form.setValues(obj);

form.reset.

接下去用isDirty()取判断时候回以setValues()以后改变的值作为有么有修改的标准。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值