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