如何将表单的状态dirty
更改为false
?
是否有setDirty(false)
的{{1}}方法?
UPD:
我的任务是跟踪Ext.Form.Panel
脏状态,以便只有在表单中有任何更改时才能启用停靠的SAVE按钮。
我正在跟踪Form
事件:
dirtychange
但是,当我通过init: function() {
this.control({
'form': {
dirtychange: function(form) {
alert('change');
}
}
});
}
方法将记录加载到表单中时,我在加载记录时发出loadRecord()
警报,并且在加载记录后表单变脏。
我想在记录加载后立即重置表单的chage
状态,并在记录填写表单上开始跟踪dirty
事件。
有什么想法吗?
答案 0 :(得分:14)
<强>校正强>
有一个属性可用于在设置值时更改原始值。
trackResetOnLoad:true
请参阅 JSFiddle
下面的旧答案可能会退出不方便但我保持不变
首先我要说你找不到任何这样的方法
那是因为表格没有这样的状态,字段有它。表单所做的就是迭代每个字段并检查它是否脏。如果任何字段为脏,将检查自上次检查后该值(脏标记)是否已更改,如果是,则触发dirtychange
事件。然后将其保存为最后一次检查(wasDirty
)
现在让我们看一下因为它们确实触发它的字段:
他们正在检查onChange
和onReset
,如果该字段是脏的,请选中!me.isEqual(me.getValue(), me.originalValue)
其中originalValue
是设置的时间initValue
被调用的值
现在做什么来“设置”表格不再“脏”
在getFields()
上使用Ext.form.Basic
迭代表单的所有字段现在我们将调用initValue
on将当前值设置为原始值(重置现在将重置为此值)每个领域就是这样。
删除了错误的代码
修改强>
我已将上一段代码从上面修改为
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;
}
}
并分叉 working example 。按钮将保持不活动状态,直到检测到任何更改,并且如果删除更改,将再次设置为非活动状态。玩弄它我想这就是你要找的东西。
答案 1 :(得分:1)
方法reset()
。如果在没有参数的情况下使用它,则会保留使用loadRecord()
加载的表单数据。
因此,如果您在加载数据后调用reset()
,则表单不应再脏。
myForm.loadRecord(record);
myForm.reset();
我认为,dirtychange
事件也会通过加载数据来调用,但在reset()
之后,您可以使用isDirty()
检查表单。
答案 2 :(得分:1)
此处的解决方法是使用隐藏字段并设置其值以强制表单变脏。我们在不包含表单字段的小部件中使用它。要将表单设置为脏,我们只需更改隐藏字段的值,将其设置为干净,我们将其重置为原始值。