ExtJS (4.2.2) 嵌套表单验证行为
ExtJS (4.2.2) nested form validation behavior
当一个 Ext.form.Panel
包含另一个 Ext.form.Panel 时,内部面板验证会冒泡到外部面板。
我有一个具有许多关系的嵌套模型。内部窗体面板用于将子模型的记录添加到父记录。内部窗体面板具有自己的验证逻辑和保存按钮,可将内容添加到父级。
但是外部表单面板现在被内部表单面板无效,这不是我想要的。当我想保存整个记录(包括 hasMany 关系(时,内部表单面板可能(并且应该(非常空(并且无效(。
如何防止内部表单面板的验证传播到外部表单面板?
考虑到 ExtJs 对嵌套模型的支持,这似乎是一件合乎逻辑的事情,但似乎在任何地方都不支持。添加孩子时我也不想弹出一些窗口。它应该与父表单很好地集成
感谢您的任何帮助。
溶液
使用 field.up('form')
可能会在一定程度上影响性能,因此请注意。
Ext.define('Custom.form.Basic', {
extend: 'Ext.form.Basic',
onFieldAdd: function (field) {
if (field.up('form') == this.owner)
this.callParent(arguments);
},
onFieldRemove: function (field) {
if (field.up('form') == this.owner)
this.callParent(arguments);
},
getFields: function () {
var owner = this.owner;
return this.monitor.getItems().filterBy(function (f) {
return f.up('form') == owner;
});
}
});
Ext.define('Custom.form.Panel', {
extend: 'Ext.form.Panel',
requires: [
'Custom.form.Basic'
],
createForm: function () {
var cfg = {},
props = this.basicFormConfigs,
len = props.length,
i = 0,
prop;
for (; i < len; ++i) {
prop = props[i];
cfg[prop] = this[prop];
}
return new Custom.form.Basic(this, cfg);
}
});
这个问题与Ext.form.Panel
无关,而与Ext.form.Basic
有关。每个FormPanel
都包含Ext.form.Basic
,并且该基本形式负责验证。为了避免这种情况,您可以扩展基本窗体并修改onFieldAdd
和onFieldRemove
方法行为。根据设计,它将处理程序添加到任何级别的面板的所有子字段。然后,您应该扩展Ext.form.Panel
createForm
方法,以便它返回扩展的基本窗体。
相关文章:
- JAVASCRIPT验证表单中的日期
- 如何在使用ajax提交的codeigniter中使用form_validation验证表单数据
- 如何使用jQuery正确验证表单
- Javascript不会验证表单
- 如何使用javascript验证表单中的数据,然后调用php页面
- 包括来自另一个页面的Boostrap模态;t验证表单
- Javascript验证表单不重定向页面
- 在提交之前验证表单,jQuery发布到javaScript,然后提交到确认页面
- 引导复选框-x 选中时未正确更新 DOM - 如何验证表单
- Jquery 验证表单
- 验证表单中的 jQuery-UI 微调器
- 在 Jquery 中验证表单的输入字段
- 如何验证表单控制数据大小不超过2.5 mb
- 在表单进入Angular中的ng-submit之前验证表单
- Javascript表单验证:表单在错误返回时提交:
- 使用Angular.js验证表单输入的原始状态
- 正在复制验证表单
- 如何在转盘中逐步(3步)验证表单
- 使用javascript验证表单值
- 验证表单按id输入val