我在 ExtJS 4 中有一个复杂的表单,其中表单的各个部分根据用户从某些表单字段中选择的内容动态启用或禁用。每当我禁用表单域时,我也会清除它当前在其中的任何值。
我有一个代表表单的模型类。要加载表单,我使用form.loadRecord(model)
. 为了在用户“提交”表单时更新我的模型,我使用model.set(form.getValues())
.
问题是 ext 的getValues()
实现跳过了禁用的表单字段。这在我的情况下会导致问题,因为某些已更改值的表单字段被禁用(即,当我禁用它们时我清除了其值的表单字段)。因此,当我调用model.set(...)
.
解决此问题的最佳方法是什么?我考虑了以下想法,但似乎没有一个很好。如果你有更好的,我想听听。
- 在调用之前清除模型(将所有字段设置为未定义)
model.setValues()
。不幸的是,没有model.clear()
方法,所以这很快就会变得丑陋 - 我必须获取所有字段并遍历它们,单独清除每个字段。 - 当我禁用和清除表单字段时,也清除模型字段。这似乎违反了关注点分离,也意味着模型会发生变化,即使用户选择取消而不提交表单也是如此。
- 覆盖 ext 的实现
form.getValues()
以不跳过禁用的字段。这更难看,因为需要更改的实际代码在Ext.form.field.Field
类中,而不是Ext.form.Basic
.