如何设置Ext.Form脏状态?

时间:2013-01-16 12:01:49

标签: extjs

如何将表单的状态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事件。

有什么想法吗?

3 个答案:

答案 0 :(得分:14)

  

<强>校正

     

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

     

trackResetOnLoad:true

     

请参阅 JSFiddle

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

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

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

现在让我们看一下因为它们确实触发它的字段:

他们正在检查onChangeonReset,如果该字段是脏的,请选中!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)

此处的解决方法是使用隐藏字段并设置其值以强制表单变脏。我们在不包含表单字段的小部件中使用它。要将表单设置为脏,我们只需更改隐藏字段的值,将其设置为干净,我们将其重置为原始值。