如何设置Ext.Form脏状态?

s.w*_*dit 9 extjs

如何将dirty表单的状态更改为false

有什么setDirty(false)方法Ext.Form.Panel吗?

UPD:

我的任务是跟踪Form脏状态,以便只有在表单中有任何更改时才能启用停靠的SAVE按钮.

我跟踪dirtychange事件:

init: function() {
    this.control({
        'form': {
            dirtychange: function(form) {
                alert('change');      
            }
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

但是当我通过loadRecord()方法将记录加载到Form中时,我在加载记录时发出chage警报,并且在加载Record之后Form变脏.

我想dirty在记录加载后立即重置表单状态,并dirtychange在记录填写表单上开始跟踪事件.

有任何想法吗?

sra*_*sra 14

更正

有一个属性可用于在设置值时更改原始值.

trackResetOnLoad:true

看到这个JSFiddle

下面的旧答案可能会退出不方便但我保持不变

首先我要说你找不到任何这样的方法

那是因为形式没有这样的状态,字段有它.表单所做的就是迭代每个字段并检查它是否脏.如果任何字段变脏,将检查自上次检查后该值(脏标记)是否已更改,如果dirtychange是,则触发该事件.然后这被保存为最后一次检查(wasDirty)

现在让我们看看它们确实触发它的字段:

他们正在检查onChange并且onReset如果字段是脏的!me.isEqual(me.getValue(), me.originalValue),originalValue则通过检查设置的值在何处initValue调用时间.

现在做什么来"设置"表格不再"脏"

现在使用getFields()on 迭代表单的所有字段,Ext.form.Basic我们将当前值设置为原始值(重置现在将重置为此值),方法是调用initValue每个字段,就是这样.

删除了错误的代码

编辑

好吧,我已经修改了上面的代码

var items = form.getForm().getFields().items,
      i = 0,
      len = items.length;
  for(; i < len; i++) {
    var c = items[i];
    if(c.mixins && c.mixins.field && typeof c.mixins.field['initValue'] == 'function') {
      c.mixins.field.initValue.apply(c);
      c.wasDirty = false;
    }
}
Run Code Online (Sandbox Code Playgroud)

并分叉了一个工作的例子.按钮将保持不活动状态,直到检测到任何更改,并且如果删除更改,将再次设置为非活动状态.玩弄它我想这就是你要找的东西.